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.94.2) (envelope-from ) id 1rcs9M-002c2j-75 for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Feb 2024 19:21:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rcs8L-005yYJ-4p for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Feb 2024 19:19:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rcs8K-005yYB-GQ for pgsql-hackers@lists.postgresql.org; Wed, 21 Feb 2024 19:19:57 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rcs8F-000DRd-Hk for pgsql-hackers@postgresql.org; Wed, 21 Feb 2024 19:19:56 +0000 Received: from [192.168.1.115] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4Tg5gn5CNsz49Q6m; Wed, 21 Feb 2024 21:19:49 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1708543190; 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=y2+nNIvq0TzVZrxQu6VcicjITKx0bPW8baT6pZJ/Dg0=; b=ruK8ffL6VPxqM1BsGmVFqaQjFW//3y2FBiVQR1urNp1sbDf8hosHajKJTCZa4UAh5mChaM Src1JAe4DyJMwUwrCsTuIWCNpz9YGsCTO8JPhsBHbqRtMBPH8sInttGJnBi0vBimIo/yHF URdSv68mUCF/La6nR3acyTDiV58EeG6qQoXTuiSHvO1YVWtCI/GZyhfe/w5KF+W0lOEJiT MIjecOCe4LYmz9boQvjddrwZ8Zm3APlzgORjvrB+HPrM/x3l6XFWH0imc9Eau/ryqjk1en RhTjszuTB59ixbcKn8XVVIEFwKK3dD5wa49ZyGWqZjkeuskmWeQsTI6B7qj0RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1708543190; 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=y2+nNIvq0TzVZrxQu6VcicjITKx0bPW8baT6pZJ/Dg0=; b=JZNf89aeY8WCDL41mu2PXecG8jOehGqKU2Me5ACzzT6iWQGHtN0vumTxROkpcWrWrzN4D8 mAZOOACWl/N4G2FMP3E+nZjI2ZtLMszf4qAPntjmD3/4COy0fkHhKP4Pr5ZLcdll7kgKuz FAyhb27bH8uHPoLIB8f5huDIsNcIWcDl1b2v6y3pw8dZeRfLbGmKLXSaslplgiNExbcbua S0nWvtJ0O0PhfeSuu9zLjrkuv4neuaI+Bvt1JKxecU9S2CFTIMxrL4thixLq8wk/vlJL/L h9b+Zw8yiTj74piVDyGYfiuI7ZvETnf8teAtKn0EAZpT2yjWS8KGY7zmGlomZA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1708543190; a=rsa-sha256; cv=none; b=NFJQx33Ec/nL4vgp5FfWNNLWgeV03oph97aNbIEP5FJtK2qPHDp9BfuWSNGC0WULTeJSOa 6oRZ+UGe0QDeMCy1NEc7mrmeEqZcwA6+XZOvSsqVQl+tPsJwTYDYgZSGDUkim7eS+yDjXa ddpiybwNQlNxX1afR3WpB1+eV1jPcOhNUUzQvgfCBL7mEa4Eqp/y7ZuP5bsxtFb2m0N2TR ul6cs5LjIR6sttnlSeFe1EeYPTpWfzJzBm3Her9pz3tTMe62Nvqd2fipAhmHZwrS3gbJF3 0Vtb1BX2xYeMUo138GI06KdTrTLttzlbjR1G3KAV9qw6pICXHB88+AQ7CrsdEA== Content-Type: multipart/mixed; boundary="------------6qX8Lat75wUwPdoQnpnr5BFA" Message-ID: Date: Wed, 21 Feb 2024 21:19:49 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Heikki Linnakangas Subject: Re: DSA_ALLOC_NO_OOM doesn't work To: Robert Haas Cc: pgsql-hackers , Thomas Munro References: <5efa4a5e-2b8b-42dd-80ed-f920718cf5c0@iki.fi> <6030bdec-0de1-4da2-b0b3-335007eae97f@iki.fi> Content-Language: en-US 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. --------------6qX8Lat75wUwPdoQnpnr5BFA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 14/02/2024 09:23, Robert Haas wrote: > On Tue, Feb 13, 2024 at 7:53 PM Heikki Linnakangas wrote: >> However, I must say that the dsm_impl_op() interface is absolutely >> insane. It's like someone looked at ioctl() and thought, "hey that's a >> great idea!". > > As the person who wrote that code, this made me laugh. > > I agree it's not the prettiest interface, but I thought that was OK > considering that it should only ever have a very limited number of > callers. I believe I did it this way in the interest of code > compactness. Since there are four DSM implementations, I wanted the > implementation-specific code to be short and all in one place, and > jamming it all into one function served that purpose. Also, there's a > bunch of logic that is shared by multiple operations - detach and > destroy tend to be similar, and so do create and attach, and there are > even things that are shared across all operations, like the snprintf > at the top of dsm_impl_posix() or the slightly larger amount of > boilerplate at the top of dsm_impl_sysv(). > > I'm not particularly opposed to refactoring this to make it nicer, but > my judgement was that splitting it up into one function per operation > per implementation, say, would have involved a lot of duplication of > small bits of code that might then get out of sync with each other > over time. By doing it this way, the logic is a bit tangled -- or > maybe more than a bit -- but there's very little duplication because > each implementation gets jammed into the smallest possible box. I'm OK > with somebody deciding that I got the trade-offs wrong there, but I > will be interested to see the number of lines added vs. removed in any > future refactoring patch. That's fair, I can see those reasons. Nevertheless, I do think it was a bad tradeoff. A little bit of repetition would be better here, or we can extract the common parts to smaller functions. I came up with the attached: 25 files changed, 1710 insertions(+), 1113 deletions(-) So yeah, it's more code, and there's some repetition, but I think this is more readable. Some of that is extra boilerplate because I split the implementations to separate files, and I also added tests. I'm not 100% wedded on all of the decisions here, but I think this is the right direction overall. For example, I decided to separate dsm_handle used by the high-level interface in dsm.c and the dsm_impl_handle used by the low-level interace in dsm_impl_*.c (more on that below). That feels slightly better to me, but could be left out if we don't want that. Notable changes: - Split the single multiplexed dsm_impl_op() function into multiple functions for different operations. This allows more natural function signatures for the different operations. - The create() function is now responsible for generating the handle, instead of having the caller generate it. Those implementations that need to generate a random handle and retry if it's already in use, now do that retry within the implementation. - The destroy() function no longer detaches the segment; you must call detach() first if the segment is still attached. This avoids having to pass "junk" values when destroying a segment that's not attached, and in case of error, makes it more clear what failed. - Separate dsm_handle, used by backend code to interact with the high level interface in dsm.c, from dsm_impl_handle, which is used to interact with the low-level functions in dsm_impl.c. This gets rid of the convention in dsm.c of reserving odd numbers for DSM segments stored in the main shmem area. There is now an explicit flag for that the control slot. For generating dsm_handles, we now use the same scheme we used to use for main-area shm segments for all DSM segments, which includes the slot number in the dsm_handle. The implementations use their own mechanisms for generating the low-level dsm_impl_handles (all but the SysV implementation generate a random handle and retry on collision). - Use IPC_PRIVATE in the SysV implementation to have the OS create a unique identifier for us. Use the shmid directly as the (low-level) handle, so that we don't need to use shmget() to convert a key to shmid, and don't need the "cache" for that. - create() no longer returns the mapped_size. The old Windows implementation had some code to read the actual mapped size after creating the mapping, and returned that in *mapped_size. Others just returned the requested size. In principle reading the actual size might be useful; the caller might be able to make use of the whole mapped size when it's larger than requested. In practice, the callers didn't do that. Also, POSIX shmem on FreeBSD has similar round-up-to-page-size behavior but the implementation did not query the actual mapped size after creating the segment, so you could not rely on it. - Added a test that exercises basic create, detach, attach functionality using all the different implementations supported on the current platform. - Change datatype of the opaque types in dsm_impl.c from "void *" to typedefs over uintptr_t. It's easy to make mistakes with "void *", as you can pass any pointer without getting warnings from the compiler. Dedicated typedefs give a bit more type checking. (This is in the first commit, all the other changes are bundled together in the second commit.) Overall, I don't think this is backpatchable. The handle changes and use of IPC_PRIVATE in particular: they could lead to failure to clean up old segments if you upgraded the binary without a clean shutdown. A slightly different version of this possibly would be, but I'd like to focus on what's best for master for now. -- Heikki Linnakangas Neon (https://neon.tech) --------------6qX8Lat75wUwPdoQnpnr5BFA Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-Change-datatype-of-the-opaque-types-in-dsm_impl.c.patch" Content-Disposition: attachment; filename*0="v1-0001-Change-datatype-of-the-opaque-types-in-dsm_impl.c.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3YjI5ZTQ4MThiYjNiNzgwNjY0ZmRlMmU4ZjU3MjZiNGYwYjU0YjdiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMjEgRmViIDIwMjQgMTc6MTU6MjIgKzAyMDAK U3ViamVjdDogW1BBVENIIHYxIDEvMl0gQ2hhbmdlIGRhdGF0eXBlIG9mIHRoZSBvcGFxdWUg dHlwZXMgaW4gZHNtX2ltcGwuYwoKSXQncyBlYXN5IHRvIG1ha2UgbWlzdGFrZXMgd2l0aCAi dm9pZCAqIiwgYXMgeW91IGNhbiBwYXNzIGFueSBwb2ludGVyCndpdGhvdXQgZ2V0dGluZyB3 YXJuaW5ncyBmcm9tIHRoZSBjb21waWxlci4gU3dpdGNoIHRvIGEgdHlwZWRlZiBvdmVyCnVp bnRwdHJfdCB0byBnZXQgYSBiaXQgbW9yZSB0eXBlIGNoZWNraW5nLgotLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2RzbS5jICAgICAgfCAyOCArKysrKysrKysrKy0tLS0tLS0tLS0t LQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGwuYyB8IDM2ICsrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9kc20uaCAgICAgICAg ICB8ICAyICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9pbXBsLmggICAgIHwgMjEgKysr KysrKysrKysrKy0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKSwgMzcg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNt LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYwppbmRleCA2YjEyMTA4ZGQxMC4u ZDNmOTgyYzViMmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jCkBAIC03MCw3ICs3MCw3IEBA IHN0cnVjdCBkc21fc2VnbWVudAogCVJlc291cmNlT3duZXIgcmVzb3duZXI7CQkvKiBSZXNv dXJjZSBvd25lci4gKi8KIAlkc21faGFuZGxlCWhhbmRsZTsJCQkvKiBTZWdtZW50IG5hbWUu ICovCiAJdWludDMyCQljb250cm9sX3Nsb3Q7CS8qIFNsb3QgaW4gY29udHJvbCBzZWdtZW50 LiAqLwotCXZvaWQJICAgKmltcGxfcHJpdmF0ZTsJLyogSW1wbGVtZW50YXRpb24tc3BlY2lm aWMgcHJpdmF0ZSBkYXRhLiAqLworCWRzbV9pbXBsX3ByaXZhdGUgaW1wbF9wcml2YXRlOwkv KiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBwcml2YXRlIGRhdGEuICovCiAJdm9pZAkgICAq bWFwcGVkX2FkZHJlc3M7IC8qIE1hcHBpbmcgYWRkcmVzcywgb3IgTlVMTCBpZiB1bm1hcHBl ZC4gKi8KIAlTaXplCQltYXBwZWRfc2l6ZTsJLyogU2l6ZSBvZiBvdXIgbWFwcGluZy4gKi8K IAlzbGlzdF9oZWFkCW9uX2RldGFjaDsJCS8qIE9uLWRldGFjaCBjYWxsYmFja3MuICovCkBA IC04Myw3ICs4Myw3IEBAIHR5cGVkZWYgc3RydWN0IGRzbV9jb250cm9sX2l0ZW0KIAl1aW50 MzIJCXJlZmNudDsJCQkvKiAyKyA9IGFjdGl2ZSwgMSA9IG1vcmlidW5kLCAwID0gZ29uZSAq LwogCXNpemVfdAkJZmlyc3RfcGFnZTsKIAlzaXplX3QJCW5wYWdlczsKLQl2b2lkCSAgICpp bXBsX3ByaXZhdGVfcG1faGFuZGxlOyAvKiBvbmx5IG5lZWRlZCBvbiBXaW5kb3dzICovCisJ ZHNtX2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgaW1wbF9wcml2YXRlX3BtX2hhbmRsZTsgLyog b25seSBuZWVkZWQgb24gV2luZG93cyAqLwogCWJvb2wJCXBpbm5lZDsKIH0gZHNtX2NvbnRy b2xfaXRlbTsKIApAQCAtMTQwLDcgKzE0MCw3IEBAIHN0YXRpYyBkbGlzdF9oZWFkIGRzbV9z ZWdtZW50X2xpc3QgPSBETElTVF9TVEFUSUNfSU5JVChkc21fc2VnbWVudF9saXN0KTsKIHN0 YXRpYyBkc21faGFuZGxlIGRzbV9jb250cm9sX2hhbmRsZTsKIHN0YXRpYyBkc21fY29udHJv bF9oZWFkZXIgKmRzbV9jb250cm9sOwogc3RhdGljIFNpemUgZHNtX2NvbnRyb2xfbWFwcGVk X3NpemUgPSAwOwotc3RhdGljIHZvaWQgKmRzbV9jb250cm9sX2ltcGxfcHJpdmF0ZSA9IE5V TEw7CitzdGF0aWMgZHNtX2ltcGxfcHJpdmF0ZSBkc21fY29udHJvbF9pbXBsX3ByaXZhdGUg PSAwOwogCiAKIC8qIFJlc291cmNlT3duZXIgY2FsbGJhY2tzIHRvIGhvbGQgRFNNIHNlZ21l bnRzICovCkBAIC0yNDAsOCArMjQwLDggQEAgZHNtX2NsZWFudXBfdXNpbmdfY29udHJvbF9z ZWdtZW50KGRzbV9oYW5kbGUgb2xkX2NvbnRyb2xfaGFuZGxlKQogewogCXZvaWQJICAgKm1h cHBlZF9hZGRyZXNzID0gTlVMTDsKIAl2b2lkCSAgICpqdW5rX21hcHBlZF9hZGRyZXNzID0g TlVMTDsKLQl2b2lkCSAgICppbXBsX3ByaXZhdGUgPSBOVUxMOwotCXZvaWQJICAgKmp1bmtf aW1wbF9wcml2YXRlID0gTlVMTDsKKwlkc21faW1wbF9wcml2YXRlIGltcGxfcHJpdmF0ZSA9 IDA7CisJZHNtX2ltcGxfcHJpdmF0ZSBqdW5rX2ltcGxfcHJpdmF0ZSA9IDA7CiAJU2l6ZQkJ bWFwcGVkX3NpemUgPSAwOwogCVNpemUJCWp1bmtfbWFwcGVkX3NpemUgPSAwOwogCXVpbnQz MgkJbml0ZW1zOwpAQCAtMzYyLDcgKzM2Miw3IEBAIGRzbV9wb3N0bWFzdGVyX3NodXRkb3du KGludCBjb2RlLCBEYXR1bSBhcmcpCiAJdWludDMyCQlpOwogCXZvaWQJICAgKmRzbV9jb250 cm9sX2FkZHJlc3M7CiAJdm9pZAkgICAqanVua19tYXBwZWRfYWRkcmVzcyA9IE5VTEw7Ci0J dm9pZAkgICAqanVua19pbXBsX3ByaXZhdGUgPSBOVUxMOworCWRzbV9pbXBsX3ByaXZhdGUg anVua19pbXBsX3ByaXZhdGUgPSAwOwogCVNpemUJCWp1bmtfbWFwcGVkX3NpemUgPSAwOwog CVBHU2htZW1IZWFkZXIgKnNoaW0gPSAoUEdTaG1lbUhlYWRlciAqKSBEYXR1bUdldFBvaW50 ZXIoYXJnKTsKIApAQCAtNTk4LDcgKzU5OCw3IEBAIGRzbV9jcmVhdGUoU2l6ZSBzaXplLCBp bnQgZmxhZ3MpCiAJCQlkc21fY29udHJvbC0+aXRlbVtpXS5oYW5kbGUgPSBzZWctPmhhbmRs ZTsKIAkJCS8qIHJlZmNudCBvZiAxIHRyaWdnZXJzIGRlc3RydWN0aW9uLCBzbyBzdGFydCBh dCAyICovCiAJCQlkc21fY29udHJvbC0+aXRlbVtpXS5yZWZjbnQgPSAyOwotCQkJZHNtX2Nv bnRyb2wtPml0ZW1baV0uaW1wbF9wcml2YXRlX3BtX2hhbmRsZSA9IE5VTEw7CisJCQlkc21f Y29udHJvbC0+aXRlbVtpXS5pbXBsX3ByaXZhdGVfcG1faGFuZGxlID0gMDsKIAkJCWRzbV9j b250cm9sLT5pdGVtW2ldLnBpbm5lZCA9IGZhbHNlOwogCQkJc2VnLT5jb250cm9sX3Nsb3Qg PSBpOwogCQkJTFdMb2NrUmVsZWFzZShEeW5hbWljU2hhcmVkTWVtb3J5Q29udHJvbExvY2sp OwpAQCAtNjM3LDcgKzYzNyw3IEBAIGRzbV9jcmVhdGUoU2l6ZSBzaXplLCBpbnQgZmxhZ3Mp CiAJZHNtX2NvbnRyb2wtPml0ZW1bbml0ZW1zXS5oYW5kbGUgPSBzZWctPmhhbmRsZTsKIAkv KiByZWZjbnQgb2YgMSB0cmlnZ2VycyBkZXN0cnVjdGlvbiwgc28gc3RhcnQgYXQgMiAqLwog CWRzbV9jb250cm9sLT5pdGVtW25pdGVtc10ucmVmY250ID0gMjsKLQlkc21fY29udHJvbC0+ aXRlbVtuaXRlbXNdLmltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgPSBOVUxMOworCWRzbV9jb250 cm9sLT5pdGVtW25pdGVtc10uaW1wbF9wcml2YXRlX3BtX2hhbmRsZSA9IDA7CiAJZHNtX2Nv bnRyb2wtPml0ZW1bbml0ZW1zXS5waW5uZWQgPSBmYWxzZTsKIAlzZWctPmNvbnRyb2xfc2xv dCA9IG5pdGVtczsKIAlkc21fY29udHJvbC0+bml0ZW1zKys7CkBAIC04NDIsNyArODQyLDcg QEAgZHNtX2RldGFjaChkc21fc2VnbWVudCAqc2VnKQogCQlpZiAoIWlzX21haW5fcmVnaW9u X2RzbV9oYW5kbGUoc2VnLT5oYW5kbGUpKQogCQkJZHNtX2ltcGxfb3AoRFNNX09QX0RFVEFD SCwgc2VnLT5oYW5kbGUsIDAsICZzZWctPmltcGxfcHJpdmF0ZSwKIAkJCQkJCSZzZWctPm1h cHBlZF9hZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6ZSwgV0FSTklORyk7Ci0JCXNlZy0+aW1w bF9wcml2YXRlID0gTlVMTDsKKwkJc2VnLT5pbXBsX3ByaXZhdGUgPSAwOwogCQlzZWctPm1h cHBlZF9hZGRyZXNzID0gTlVMTDsKIAkJc2VnLT5tYXBwZWRfc2l6ZSA9IDA7CiAJfQpAQCAt OTU1LDcgKzk1NSw3IEBAIGRzbV91bnBpbl9tYXBwaW5nKGRzbV9zZWdtZW50ICpzZWcpCiB2 b2lkCiBkc21fcGluX3NlZ21lbnQoZHNtX3NlZ21lbnQgKnNlZykKIHsKLQl2b2lkCSAgICpo YW5kbGUgPSBOVUxMOworCWRzbV9pbXBsX3ByaXZhdGVfcG1faGFuZGxlIHBtX2hhbmRsZSA9 IDA7CiAKIAkvKgogCSAqIEJ1bXAgcmVmZXJlbmNlIGNvdW50IGZvciB0aGlzIHNlZ21lbnQg aW4gc2hhcmVkIG1lbW9yeS4gVGhpcyB3aWxsCkBAIC05NjcsMTAgKzk2NywxMCBAQCBkc21f cGluX3NlZ21lbnQoZHNtX3NlZ21lbnQgKnNlZykKIAlpZiAoZHNtX2NvbnRyb2wtPml0ZW1b c2VnLT5jb250cm9sX3Nsb3RdLnBpbm5lZCkKIAkJZWxvZyhFUlJPUiwgImNhbm5vdCBwaW4g YSBzZWdtZW50IHRoYXQgaXMgYWxyZWFkeSBwaW5uZWQiKTsKIAlpZiAoIWlzX21haW5fcmVn aW9uX2RzbV9oYW5kbGUoc2VnLT5oYW5kbGUpKQotCQlkc21faW1wbF9waW5fc2VnbWVudChz ZWctPmhhbmRsZSwgc2VnLT5pbXBsX3ByaXZhdGUsICZoYW5kbGUpOworCQlkc21faW1wbF9w aW5fc2VnbWVudChzZWctPmhhbmRsZSwgc2VnLT5pbXBsX3ByaXZhdGUsICZwbV9oYW5kbGUp OwogCWRzbV9jb250cm9sLT5pdGVtW3NlZy0+Y29udHJvbF9zbG90XS5waW5uZWQgPSB0cnVl OwogCWRzbV9jb250cm9sLT5pdGVtW3NlZy0+Y29udHJvbF9zbG90XS5yZWZjbnQrKzsKLQlk c21fY29udHJvbC0+aXRlbVtzZWctPmNvbnRyb2xfc2xvdF0uaW1wbF9wcml2YXRlX3BtX2hh bmRsZSA9IGhhbmRsZTsKKwlkc21fY29udHJvbC0+aXRlbVtzZWctPmNvbnRyb2xfc2xvdF0u aW1wbF9wcml2YXRlX3BtX2hhbmRsZSA9IHBtX2hhbmRsZTsKIAlMV0xvY2tSZWxlYXNlKER5 bmFtaWNTaGFyZWRNZW1vcnlDb250cm9sTG9jayk7CiB9CiAKQEAgLTEwMzksNyArMTAzOSw3 IEBAIGRzbV91bnBpbl9zZWdtZW50KGRzbV9oYW5kbGUgaGFuZGxlKQogCS8qIENsZWFuIHVw IHJlc291cmNlcyBpZiB0aGF0IHdhcyB0aGUgbGFzdCByZWZlcmVuY2UuICovCiAJaWYgKGRl c3Ryb3kpCiAJewotCQl2b2lkCSAgICpqdW5rX2ltcGxfcHJpdmF0ZSA9IE5VTEw7CisJCWRz bV9pbXBsX3ByaXZhdGUganVua19pbXBsX3ByaXZhdGUgPSAwOwogCQl2b2lkCSAgICpqdW5r X21hcHBlZF9hZGRyZXNzID0gTlVMTDsKIAkJU2l6ZQkJanVua19tYXBwZWRfc2l6ZSA9IDA7 CiAKQEAgLTEyMTEsNyArMTIxMSw3IEBAIGRzbV9jcmVhdGVfZGVzY3JpcHRvcih2b2lkKQog CiAJLyogc2VnLT5oYW5kbGUgbXVzdCBiZSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyICov CiAJc2VnLT5jb250cm9sX3Nsb3QgPSBJTlZBTElEX0NPTlRST0xfU0xPVDsKLQlzZWctPmlt cGxfcHJpdmF0ZSA9IE5VTEw7CisJc2VnLT5pbXBsX3ByaXZhdGUgPSAwOwogCXNlZy0+bWFw cGVkX2FkZHJlc3MgPSBOVUxMOwogCXNlZy0+bWFwcGVkX3NpemUgPSAwOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbC5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvZHNtX2ltcGwuYwppbmRleCA4ZGQ2NjllMGNlOS4uNDQ3OGM1OGJiNzIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGwuYwpAQCAtNzEsMjMgKzcxLDIzIEBA CiAKICNpZmRlZiBVU0VfRFNNX1BPU0lYCiBzdGF0aWMgYm9vbCBkc21faW1wbF9wb3NpeChk c21fb3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKLQkJCQkJ CSAgIHZvaWQgKippbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywKKwkJCQkJ CSAgIGRzbV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRy ZXNzLAogCQkJCQkJICAgU2l6ZSAqbWFwcGVkX3NpemUsIGludCBlbGV2ZWwpOwogc3RhdGlj IGludAlkc21faW1wbF9wb3NpeF9yZXNpemUoaW50IGZkLCBvZmZfdCBzaXplKTsKICNlbmRp ZgogI2lmZGVmIFVTRV9EU01fU1lTVgogc3RhdGljIGJvb2wgZHNtX2ltcGxfc3lzdihkc21f b3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKLQkJCQkJCSAg dm9pZCAqKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLAorCQkJCQkJICBk c21faW1wbF9wcml2YXRlICppbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywK IAkJCQkJCSAgU2l6ZSAqbWFwcGVkX3NpemUsIGludCBlbGV2ZWwpOwogI2VuZGlmCiAjaWZk ZWYgVVNFX0RTTV9XSU5ET1dTCiBzdGF0aWMgYm9vbCBkc21faW1wbF93aW5kb3dzKGRzbV9v cCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAotCQkJCQkJCSB2 b2lkICoqaW1wbF9wcml2YXRlLCB2b2lkICoqbWFwcGVkX2FkZHJlc3MsCisJCQkJCQkJIGRz bV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLAog CQkJCQkJCSBTaXplICptYXBwZWRfc2l6ZSwgaW50IGVsZXZlbCk7CiAjZW5kaWYKICNpZmRl ZiBVU0VfRFNNX01NQVAKIHN0YXRpYyBib29sIGRzbV9pbXBsX21tYXAoZHNtX29wIG9wLCBk c21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3NpemUsCi0JCQkJCQkgIHZvaWQgKipp bXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywKKwkJCQkJCSAgZHNtX2ltcGxf cHJpdmF0ZSAqaW1wbF9wcml2YXRlLCB2b2lkICoqbWFwcGVkX2FkZHJlc3MsCiAJCQkJCQkg IFNpemUgKm1hcHBlZF9zaXplLCBpbnQgZWxldmVsKTsKICNlbmRpZgogc3RhdGljIGludAll cnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkodm9pZCk7CkBAIC0xNTcsNyArMTU3 LDcgQEAgaW50CQkJbWluX2R5bmFtaWNfc2hhcmVkX21lbW9yeTsKICAqLwogYm9vbAogZHNt X2ltcGxfb3AoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3Np emUsCi0JCQl2b2lkICoqaW1wbF9wcml2YXRlLCB2b2lkICoqbWFwcGVkX2FkZHJlc3MsIFNp emUgKm1hcHBlZF9zaXplLAorCQkJZHNtX2ltcGxfcHJpdmF0ZSAqaW1wbF9wcml2YXRlLCB2 b2lkICoqbWFwcGVkX2FkZHJlc3MsIFNpemUgKm1hcHBlZF9zaXplLAogCQkJaW50IGVsZXZl bCkKIHsKIAlBc3NlcnQob3AgPT0gRFNNX09QX0NSRUFURSB8fCByZXF1ZXN0X3NpemUgPT0g MCk7CkBAIC0yMTAsNyArMjEwLDcgQEAgZHNtX2ltcGxfb3AoZHNtX29wIG9wLCBkc21faGFu ZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3NpemUsCiAgKi8KIHN0YXRpYyBib29sCiBkc21f aW1wbF9wb3NpeChkc21fb3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rf c2l6ZSwKLQkJCSAgIHZvaWQgKippbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVz cywgU2l6ZSAqbWFwcGVkX3NpemUsCisJCQkgICBkc21faW1wbF9wcml2YXRlICppbXBsX3By aXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywgU2l6ZSAqbWFwcGVkX3NpemUsCiAJCQkg ICBpbnQgZWxldmVsKQogewogCWNoYXIJCW5hbWVbNjRdOwpAQCAtNDIxLDcgKzQyMSw3IEBA IGRzbV9pbXBsX3Bvc2l4X3Jlc2l6ZShpbnQgZmQsIG9mZl90IHNpemUpCiAgKi8KIHN0YXRp YyBib29sCiBkc21faW1wbF9zeXN2KGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUsIFNp emUgcmVxdWVzdF9zaXplLAotCQkJICB2b2lkICoqaW1wbF9wcml2YXRlLCB2b2lkICoqbWFw cGVkX2FkZHJlc3MsIFNpemUgKm1hcHBlZF9zaXplLAorCQkJICBkc21faW1wbF9wcml2YXRl ICppbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywgU2l6ZSAqbWFwcGVkX3Np emUsCiAJCQkgIGludCBlbGV2ZWwpCiB7CiAJa2V5X3QJCWtleTsKQEAgLTQ3Nyw5ICs0Nzcs OSBAQCBkc21faW1wbF9zeXN2KGRzbV9vcCBvcCwgZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUg cmVxdWVzdF9zaXplLAogCSAqIHRoZSBzaGFyZWQgbWVtb3J5IGtleSB0byBhIHNoYXJlZCBt ZW1vcnkgaWRlbnRpZmllciB1c2luZyBzaG1nZXQoKS4gVG8KIAkgKiBhdm9pZCByZXBlYXRl ZCBsb29rdXBzLCB3ZSBzdG9yZSB0aGUga2V5IHVzaW5nIGltcGxfcHJpdmF0ZS4KIAkgKi8K LQlpZiAoKmltcGxfcHJpdmF0ZSAhPSBOVUxMKQorCWlmICgqaW1wbF9wcml2YXRlICE9IDAp CiAJewotCQlpZGVudF9jYWNoZSA9ICppbXBsX3ByaXZhdGU7CisJCWlkZW50X2NhY2hlID0g KGludCAqKSAqaW1wbF9wcml2YXRlOwogCQlpZGVudCA9ICppZGVudF9jYWNoZTsKIAl9CiAJ ZWxzZQpAQCAtNTIyLDE0ICs1MjIsMTQgQEAgZHNtX2ltcGxfc3lzdihkc21fb3Agb3AsIGRz bV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKIAkJfQogCiAJCSppZGVudF9j YWNoZSA9IGlkZW50OwotCQkqaW1wbF9wcml2YXRlID0gaWRlbnRfY2FjaGU7CisJCSppbXBs X3ByaXZhdGUgPSAodWludHB0cl90KSBpZGVudF9jYWNoZTsKIAl9CiAKIAkvKiBIYW5kbGUg dGVhcmRvd24gY2FzZXMuICovCiAJaWYgKG9wID09IERTTV9PUF9ERVRBQ0ggfHwgb3AgPT0g RFNNX09QX0RFU1RST1kpCiAJewogCQlwZnJlZShpZGVudF9jYWNoZSk7Ci0JCSppbXBsX3By aXZhdGUgPSBOVUxMOworCQkqaW1wbF9wcml2YXRlID0gMDsKIAkJaWYgKCptYXBwZWRfYWRk cmVzcyAhPSBOVUxMICYmIHNobWR0KCptYXBwZWRfYWRkcmVzcykgIT0gMCkKIAkJewogCQkJ ZXJlcG9ydChlbGV2ZWwsCkBAIC02MDgsNyArNjA4LDcgQEAgZHNtX2ltcGxfc3lzdihkc21f b3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKICAqLwogc3Rh dGljIGJvb2wKIGRzbV9pbXBsX3dpbmRvd3MoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRs ZSwgU2l6ZSByZXF1ZXN0X3NpemUsCi0JCQkJIHZvaWQgKippbXBsX3ByaXZhdGUsIHZvaWQg KiptYXBwZWRfYWRkcmVzcywKKwkJCQkgZHNtX2ltcGxfcHJpdmF0ZSAqaW1wbF9wcml2YXRl LCB2b2lkICoqbWFwcGVkX2FkZHJlc3MsCiAJCQkJIFNpemUgKm1hcHBlZF9zaXplLCBpbnQg ZWxldmVsKQogewogCWNoYXIJICAgKmFkZHJlc3M7CkBAIC03OTAsNyArNzkwLDcgQEAgZHNt X2ltcGxfd2luZG93cyhkc21fb3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVl c3Rfc2l6ZSwKICAqLwogc3RhdGljIGJvb2wKIGRzbV9pbXBsX21tYXAoZHNtX29wIG9wLCBk c21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3NpemUsCi0JCQkgIHZvaWQgKippbXBs X3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywgU2l6ZSAqbWFwcGVkX3NpemUsCisJ CQkgIGRzbV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRy ZXNzLCBTaXplICptYXBwZWRfc2l6ZSwKIAkJCSAgaW50IGVsZXZlbCkKIHsKIAljaGFyCQlu YW1lWzY0XTsKQEAgLTk2MCw4ICs5NjAsOCBAQCBkc21faW1wbF9tbWFwKGRzbV9vcCBvcCwg ZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAogICogZG8gYW55dGhpbmcg dG8gcmVjZWl2ZSB0aGUgaGFuZGxlOyBXaW5kb3dzIHRyYW5zZmVycyBpdCBhdXRvbWF0aWNh bGx5LgogICovCiB2b2lkCi1kc21faW1wbF9waW5fc2VnbWVudChkc21faGFuZGxlIGhhbmRs ZSwgdm9pZCAqaW1wbF9wcml2YXRlLAotCQkJCQkgdm9pZCAqKmltcGxfcHJpdmF0ZV9wbV9o YW5kbGUpCitkc21faW1wbF9waW5fc2VnbWVudChkc21faGFuZGxlIGhhbmRsZSwgZHNtX2lt cGxfcHJpdmF0ZSBpbXBsX3ByaXZhdGUsCisJCQkJCSBkc21faW1wbF9wcml2YXRlX3BtX2hh bmRsZSAqcG1faGFuZGxlKQogewogCXN3aXRjaCAoZHluYW1pY19zaGFyZWRfbWVtb3J5X3R5 cGUpCiAJewpAQCAtOTkyLDcgKzk5Miw3IEBAIGRzbV9pbXBsX3Bpbl9zZWdtZW50KGRzbV9o YW5kbGUgaGFuZGxlLCB2b2lkICppbXBsX3ByaXZhdGUsCiAJCQkJICogbWF0dGVyLiAgV2Un cmUganVzdCBob2xkaW5nIG9udG8gaXQgc28gdGhhdCwgaWYgdGhlIHNlZ21lbnQKIAkJCQkg KiBpcyB1bnBpbm5lZCwgZHNtX2ltcGxfdW5waW5fc2VnbWVudCBjYW4gY2xvc2UgaXQuCiAJ CQkJICovCi0JCQkJKmltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgPSBobWFwOworCQkJCSpwbV9o YW5kbGUgPSBobWFwOwogCQkJfQogCQkJYnJlYWs7CiAjZW5kaWYKQEAgLTEwMTEsNyArMTAx MSw3IEBAIGRzbV9pbXBsX3Bpbl9zZWdtZW50KGRzbV9oYW5kbGUgaGFuZGxlLCB2b2lkICpp bXBsX3ByaXZhdGUsCiAgKiBwb3N0bWFzdGVyJ3MgcHJvY2VzcyBzcGFjZS4KICAqLwogdm9p ZAotZHNtX2ltcGxfdW5waW5fc2VnbWVudChkc21faGFuZGxlIGhhbmRsZSwgdm9pZCAqKmlt cGxfcHJpdmF0ZSkKK2RzbV9pbXBsX3VucGluX3NlZ21lbnQoZHNtX2hhbmRsZSBoYW5kbGUs IGRzbV9pbXBsX3ByaXZhdGVfcG1faGFuZGxlICpwbV9oYW5kbGUpCiB7CiAJc3dpdGNoIChk eW5hbWljX3NoYXJlZF9tZW1vcnlfdHlwZSkKIAl7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBk c21faW1wbF91bnBpbl9zZWdtZW50KGRzbV9oYW5kbGUgaGFuZGxlLCB2b2lkICoqaW1wbF9w cml2YXRlKQogCQkJCQkJCQkJbmFtZSkpKTsKIAkJCQl9CiAKLQkJCQkqaW1wbF9wcml2YXRl ID0gTlVMTDsKKwkJCQkqcG1faGFuZGxlID0gMDsKIAkJCX0KIAkJCWJyZWFrOwogI2VuZGlm CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbS5oIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9kc20uaAppbmRleCAxYTIyYjMyZGYxYS4uMzVhZTRlYjE2NGUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9kc20uaApAQCAtMTMsNyArMTMsNyBAQAogI2lmbmRlZiBEU01fSAogI2RlZmluZSBEU01f SAogCi0jaW5jbHVkZSAic3RvcmFnZS9kc21faW1wbC5oIgorI2luY2x1ZGUgImRzbV9pbXBs LmgiCiAKIHR5cGVkZWYgc3RydWN0IGRzbV9zZWdtZW50IGRzbV9zZWdtZW50OwogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9pbXBsLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2RzbV9pbXBsLmgKaW5kZXggODgyMjY5NjAzZGEuLmYyYmZiMmExYTVjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9pbXBsLmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9kc21faW1wbC5oCkBAIC02NiwxNCArNjYsMjcgQEAgdHlwZWRlZiBlbnVt CiAJRFNNX09QX0RFU1RST1ksCiB9IGRzbV9vcDsKIAorLyoKKyAqIFdoZW4gYSBzZWdtZW50 IGlzIGNyZWF0ZWQgb3IgYXR0YWNoZWQsIHRoZSBjYWxsZXIgcHJvdmlkZXMgdGhpcyBzcGFj ZSB0bworICogaG9sZCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgYXR0YWNobWVudC4gSXQgaXMgb3BhcXVlCisgKiB0byB0aGUgY2FsbGVyLCBhbmQg aXMgcGFzc2VkIGJhY2sgdG8gdGhlIGltcGxlbWVudGF0aW9uIHdoZW4gZGV0YWNoaW5nLgor ICovCit0eXBlZGVmIHVpbnRwdHJfdCBkc21faW1wbF9wcml2YXRlOworCisvKgorICogU2lt aWxhciBjYWxsZXItcHJvdmlkZWQgc3BhY2UgZm9yIGltcGxlbWVudGF0aW9uLXNwZWNpZmlj IGluZm9ybWF0aW9uIGhlbGQKKyAqIHdoZW4gYSBzZWdtZW50IGlzIHBpbm5lZC4KKyAqLwor dHlwZWRlZiB1aW50cHRyX3QgZHNtX2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGU7CisKIC8qIENy ZWF0ZSwgYXR0YWNoIHRvLCBkZXRhY2ggZnJvbSwgcmVzaXplLCBvciBkZXN0cm95IGEgc2Vn bWVudC4gKi8KIGV4dGVybiBib29sIGRzbV9pbXBsX29wKGRzbV9vcCBvcCwgZHNtX2hhbmRs ZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAotCQkJCQkJdm9pZCAqKmltcGxfcHJpdmF0 ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLCBTaXplICptYXBwZWRfc2l6ZSwKKwkJCQkJCWRz bV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLCBT aXplICptYXBwZWRfc2l6ZSwKIAkJCQkJCWludCBlbGV2ZWwpOwogCiAvKiBJbXBsZW1lbnRh dGlvbi1kZXBlbmRlbnQgYWN0aW9ucyByZXF1aXJlZCB0byBrZWVwIHNlZ21lbnQgdW50aWwg c2h1dGRvd24uICovCi1leHRlcm4gdm9pZCBkc21faW1wbF9waW5fc2VnbWVudChkc21faGFu ZGxlIGhhbmRsZSwgdm9pZCAqaW1wbF9wcml2YXRlLAotCQkJCQkJCQkgdm9pZCAqKmltcGxf cHJpdmF0ZV9wbV9oYW5kbGUpOwotZXh0ZXJuIHZvaWQgZHNtX2ltcGxfdW5waW5fc2VnbWVu dChkc21faGFuZGxlIGhhbmRsZSwgdm9pZCAqKmltcGxfcHJpdmF0ZSk7CitleHRlcm4gdm9p ZCBkc21faW1wbF9waW5fc2VnbWVudChkc21faGFuZGxlIGhhbmRsZSwgZHNtX2ltcGxfcHJp dmF0ZSBpbXBsX3ByaXZhdGUsCisJCQkJCQkJCSBkc21faW1wbF9wcml2YXRlX3BtX2hhbmRs ZSAqaW1wbF9wcml2YXRlX3BtX2hhbmRsZSk7CitleHRlcm4gdm9pZCBkc21faW1wbF91bnBp bl9zZWdtZW50KGRzbV9oYW5kbGUgaGFuZGxlLCBkc21faW1wbF9wcml2YXRlX3BtX2hhbmRs ZSAqcG1faGFuZGxlKTsKIAogI2VuZGlmCQkJCQkJCS8qIERTTV9JTVBMX0ggKi8KLS0gCjIu MzkuMgoK --------------6qX8Lat75wUwPdoQnpnr5BFA Content-Type: text/x-patch; charset=UTF-8; name="v1-0002-Rewrite-the-dsm_impl-interface.patch" Content-Disposition: attachment; filename="v1-0002-Rewrite-the-dsm_impl-interface.patch" Content-Transfer-Encoding: base64 RnJvbSBjZTBiMGFlNGNhNGNjNjA0NmVjMjBiYWFmNjI3YmJhMWE5Y2M3MTEyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMjEgRmViIDIwMjQgMjE6MDk6NTkgKzAyMDAK U3ViamVjdDogW1BBVENIIHYxIDIvMl0gUmV3cml0ZSB0aGUgZHNtX2ltcGwgaW50ZXJmYWNl CgpOb3RhYmxlIGNoYW5nZXM6CgotIFNwbGl0IHRoZSBzaW5nbGUgbXVsdGlwbGV4ZWQgZHNt X2ltcGxfb3AoKSBmdW5jdGlvbiBpbnRvIG11bHRpcGxlCiAgZnVuY3Rpb25zIGZvciBkaWZm ZXJlbnQgb3BlcmF0aW9ucy4gVGhpcyBhbGxvd3MgbW9yZSBuYXR1cmFsIGZ1bmN0aW9uCiAg c2lnbmF0dXJlcyBmb3IgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zLgoKLSBUaGUgY3JlYXRl KCkgZnVuY3Rpb24gaXMgbm93IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBoYW5k bGUsCiAgaW5zdGVhZCBvZiBoYXZpbmcgdGhlIGNhbGxlciBnZW5lcmF0ZSBpdC4gVGhvc2Ug aW1wbGVtZW50YXRpb25zIHRoYXQKICBuZWVkIHRvIGdlbmVyYXRlIGEgcmFuZG9tIGhhbmRs ZSBhbmQgcmV0cnkgaWYgaXQncyBhbHJlYWR5IGluIHVzZSBub3cKICBkbyB0aGF0IHJldHJ5 IHdpdGhpbiB0aGUgaW1wbGVtZW50YXRpb24uCgotIFRoZSBkZXN0cm95KCkgZnVuY3Rpb24g bm8gbG9uZ2VyIGRldGFjaGVzIHRoZSBzZWdtZW50OyB5b3UgbXVzdCBjYWxsCiAgZGV0YWNo KCkgZmlyc3QsIGlmIHRoZSBzZWdtZW50IGlzIHN0aWxsIGF0dGFjaGVkLiBUaGlzIGF2b2lk cyBoYXZpbmcKICB0byBwYXNzICJqdW5rIiB2YWx1ZXMgd2hlbiBkZXN0b3lpbmcgYSBzZWdt ZW50IHRoYXQncyBub3QgYXR0YWNoZWQsCiAgYW5kIGluIGNhc2Ugb2YgZXJyb3IsIG1ha2Vz IGl0IG1vcmUgY2xlYXIgd2hhdCBmYWlsZWQuCgotIFNlcGFyYXRlIGRzbV9oYW5kbGUsIHVz ZWQgYnkgYmFja2VuZCBjb2RlIHRvIGludGVyYWN0IHdpdGggdGhlCiAgaGlnaC1sZXZlbCBp bnRlcmZhY2UgaW4gZHNtLmMsIGZyb20gZHNtX2ltcGxfaGFuZGxlLCB3aGljaCBpcyB1c2Vk IHRvCiAgaW50ZXJhY3Qgd2l0aCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyBpbiBkc21faW1w bC5jLiBUaGlzIGdldHMgcmlkIG9mCiAgdGhlIGNvbnZlbnRpb24gaW4gZHNtLmMgb2YgcmVz ZXJ2aW5nIG9kZCBudW1iZXJzIGZvciBEU00gc2VnbWVudHMKICBzdG9yZWQgaW4gdGhlIG1h aW4gc2htZW0gYXJlYS4gVGhlcmUgaXMgbm93IGFuIGV4cGxpY2l0IGZsYWcgZm9yIHRoYXQK ICB0aGUgY29udHJvbCBzbG90LiBGb3IgZ2VuZXJhdGluZyBkc21faGFuZGxlcywgd2Ugbm93 IHVzZSB0aGUgc2FtZQogIHNjaGVtZSB3ZSB1c2VkIHRvIHVzZSBmb3IgbWFpbi1hcmVhIHNo bSBzZWdtZW50cyBmb3IgYWxsIERTTSBzZWdtZW50cywKICB3aGljaCBpbmNsdWRlcyB0aGUg c2xvdCBudW1iZXIgaW4gdGhlIGRzbV9oYW5kbGUuIFRoZSBpbXBsZW1lbnRhdGlvbnMKICB1 c2UgdGhlaXIgb3duIG1lY2hhbmlzbXMgZm9yIGdlbmVyYXRpbmcgdGhlIGxvdy1sZXZlbAog IGRzbV9pbXBsX2hhbmRsZXMgKGFsbCBidXQgdGhlIFN5c1YgaW1wbGVtZW50YXRpb24gZ2Vu ZXJhdGUgYSByYW5kb20KICBoYW5kbGUgYW5kIHJldHJ5IG9uIGNvbGxpc2lvbikuCgotIFVz ZSBJUENfUFJJVkFURSBpbiB0aGUgU3lzViBpbXBsZW1lbnRhdGlvbiB0byBoYXZlIHRoZSBP UyBjcmVhdGUgYQogIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB1cy4gVXNlIHRoZSBzaG1pZCBk aXJlY3RseSBhcyB0aGUgKGxvdy1sZXZlbCkKICBoYW5kbGUsIHNvIHRoYXQgd2UgZG9uJ3Qg bmVlZCB0byB1c2Ugc2htZ2V0KCkgdG8gY29udmVydCBhIGtleSB0bwogIHNobWlkLCBhbmQg ZG9uJ3QgbmVlZCB0aGUgY2FjaGUgZm9yIHRoYXQuCgotIGNyZWF0ZSgpIG5vIGxvbmdlciBy ZXR1cm5zIHRoZSBtYXBwZWRfc2l6ZS4gVGhlIG9sZCBXaW5kb3dzCiAgaW1wbGVtZW50YXRp b24gaGFkIHNvbWUgY29kZSB0byByZWFkIHRoZSBhY3R1YWwgbWFwcGVkIHNpemUgYWZ0ZXIK ICBjcmVhdGluZyB0aGUgbWFwcGluZywgYW5kIHJldHVybmVkIHRoYXQgaW4gKm1hcHBlZF9z aXplLiBJbiBwcmluY2lwbGUKICB0aGF0IG1pZ2h0IGJlIHVzZWZ1bDsgdGhlIGNhbGxlciBt aWdodCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRoZQogIHdob2xlIG1hcHBlZCBzaXplIHdo ZW4gaXQncyBsYXJnZXIgdGhhbiByZXF1ZXN0ZWQuIEluIHByYWN0aWNlLCB0aGUKICBjYWxs ZXJzIGRpZG4ndCBkbyB0aGF0LiBBbHNvLCBQT1NJWCBzaG1lbSBvbiBGcmVlQlNEIGhhcyBz aW1pbGFyCiAgcm91bmQtdXAtdG8tcGFnZS1zaXplIGJlaGF2aW9yIGJ1dCB0aGUgaW1wbGVt ZW50YXRpb24gZGlkIG5vdCBxdWVyeQogIHRoZSBhY3R1YWwgbWFwcGVkIHNpemUgYWZ0ZXIg Y3JlYXRpbmcgdGhlIHNlZ21lbnQsIHNvIHlvdSBjb3VsZCBub3QKICByZWx5IG9uIGl0LgoK LSBBZGRlZCBhIHRlc3QgdGhhdCBleGVyY2lzZXMgYmFzaWMgY3JlYXRlLCBkZXRhY2gsIGF0 dGFjaAogIGZ1bmN0aW9uYWxpdHkgdXNpbmcgYWxsIHRoZSBkaWZmZXJlbnQgaW1wbGVtZW50 YXRpb25zIHN1cHBvcnRlZCBvbiB0aGUKICBjdXJyZW50IHBsYXRmb3JtLgoKRGlzY3Vzc2lv bjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC82MDMwYmRlYy0wZGUx LTRkYTItYjBiMy0zMzUwMDdlYWU5N2ZAaWtpLmZpCi0tLQogc3JjL2JhY2tlbmQvcG9ydC9z eXN2X3NobWVtLmMgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3BvcnQv d2luMzJfc2htZW0uYyAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9kc20uYyAgICAgICAgICAgICAgICB8IDI3MyArKy0tLQogc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvZHNtX2ltcGwuYyAgICAgICAgICAgfCA5ODQgKy0tLS0tLS0tLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGxfbW1hcC5jICAgICAgfCAz MDAgKysrKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbF9wb3NpeC5jICAg ICB8IDM0MSArKysrKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbF9zeXN2 LmMgICAgICB8IDIyNCArKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGxf d2luZG93cy5jICAgfCAzNDUgKysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvbWVz b24uYnVpbGQgICAgICAgICAgfCAgMTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf dGFibGVzLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtLmgg ICAgICAgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9p bXBsLmggICAgICAgICAgICAgICB8ICA5OSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wZ19z aG1lbS5oICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2d1Y19o b29rcy5oICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZp bGUgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24u YnVpbGQgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k c20vLmdpdGlnbm9yZSAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k c20vTWFrZWZpbGUgICAgICAgICAgIHwgIDI3ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k c20vbWVzb24uYnVpbGQgICAgICAgIHwgIDMzICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k c20vdC8wMDFfZHNtX2Jhc2ljLnBsIHwgIDYxICsrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZHNtL3Rlc3RfZHNtLS0xLjAuc3FsICB8ICAgOSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZHNtL3Rlc3RfZHNtLmMgICAgICAgICB8ICA3NSArKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RzbS90ZXN0X2RzbS5jb250cm9sICAgfCAgIDQgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgICAgICAgICAgICAgfCAgIDMgKwogMjUgZmlsZXMgY2hhbmdlZCwgMTcx NCBpbnNlcnRpb25zKCspLCAxMTEzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsX21tYXAuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsX3Bvc2l4LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbF9zeXN2LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbF93 aW5kb3dzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNt Ly5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZHNtL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RzbS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9kc20vdC8wMDFfZHNtX2Jhc2ljLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RzbS90ZXN0X2RzbS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kc20vdGVzdF9kc20uYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kc20vdGVzdF9kc20uY29udHJvbAoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9zaG1lbS5jIGIvc3JjL2JhY2tlbmQv cG9ydC9zeXN2X3NobWVtLmMKaW5kZXggOWE5NjMyOWJmMjUuLmI5YmYyOTc5ZjVkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYworKysgYi9zcmMvYmFja2Vu ZC9wb3J0L3N5c3Zfc2htZW0uYwpAQCAtODI3LDcgKzgyNyw3IEBAIFBHU2hhcmVkTWVtb3J5 Q3JlYXRlKFNpemUgc2l6ZSwKIAkJCQkgKiBpZiBzb21lIG90aGVyIHByb2Nlc3MgY3JlYXRl cyB0aGUgc2FtZSBzaG1lbSBrZXkgYmVmb3JlIHdlCiAJCQkJICogZG8sIGluIHdoaWNoIGNh c2Ugd2UnbGwgdHJ5IHRoZSBuZXh0IGtleS4KIAkJCQkgKi8KLQkJCQlpZiAob2xkaGRyLT5k c21fY29udHJvbCAhPSAwKQorCQkJCWlmIChvbGRoZHItPmRzbV9jb250cm9sICE9IERTTV9J TVBMX0hBTkRMRV9JTlZBTElEKQogCQkJCQlkc21fY2xlYW51cF91c2luZ19jb250cm9sX3Nl Z21lbnQob2xkaGRyLT5kc21fY29udHJvbCk7CiAJCQkJaWYgKHNobWN0bChzaG1pZCwgSVBD X1JNSUQsIE5VTEwpIDwgMCkKIAkJCQkJTmV4dFNobWVtU2VnSUQrKzsKQEAgLTg0Miw3ICs4 NDIsNyBAQCBQR1NoYXJlZE1lbW9yeUNyZWF0ZShTaXplIHNpemUsCiAJaGRyID0gKFBHU2ht ZW1IZWFkZXIgKikgbWVtQWRkcmVzczsKIAloZHItPmNyZWF0b3JQSUQgPSBnZXRwaWQoKTsK IAloZHItPm1hZ2ljID0gUEdTaG1lbU1hZ2ljOwotCWhkci0+ZHNtX2NvbnRyb2wgPSAwOwor CWhkci0+ZHNtX2NvbnRyb2wgPSBEU01fSU1QTF9IQU5ETEVfSU5WQUxJRDsKIAogCS8qIEZp bGwgaW4gdGhlIGRhdGEgZGlyZWN0b3J5IElEIGluZm8sIHRvbyAqLwogCWhkci0+ZGV2aWNl ID0gc3RhdGJ1Zi5zdF9kZXY7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3J0L3dpbjMy X3NobWVtLmMgYi9zcmMvYmFja2VuZC9wb3J0L3dpbjMyX3NobWVtLmMKaW5kZXggOTBiZWQw MTQ2ZGQuLmIyMzY4NmRkNDlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3J0L3dpbjMy X3NobWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9ydC93aW4zMl9zaG1lbS5jCkBAIC0zOTAs NyArMzkwLDcgQEAgcmV0cnk6CiAJICovCiAJaGRyLT50b3RhbHNpemUgPSBzaXplOwogCWhk ci0+ZnJlZW9mZnNldCA9IE1BWEFMSUdOKHNpemVvZihQR1NobWVtSGVhZGVyKSk7Ci0JaGRy LT5kc21fY29udHJvbCA9IDA7CisJaGRyLT5kc21fY29udHJvbCA9IERTTV9JTVBMX0hBTkRM RV9JTlZBTElEOwogCiAJLyogU2F2ZSBpbmZvIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlICov CiAJVXNlZFNobWVtU2VnQWRkciA9IG1lbUFkZHJlc3M7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL01h a2VmaWxlCmluZGV4IGQ4YTE2NTNlYjZhLi40ZTYwMGY3N2QxYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvTWFrZWZpbGUKQEAgLTI3LDQgKzI3LDE0IEBAIE9CSlMgPSBcCiAJc2ludmFsYWR0 Lm8gXAogCXN0YW5kYnkubwogCitpZmVxICgkKFBPUlROQU1FKSwgd2luMzIpCitPQkpTICs9 IGRzbV9pbXBsX3dpbmRvd3MubworZWxzZQorIyBUT0RPOiBPbmx5IGJ1aWxkIHRoZSBQT1NJ WCBhbmQgU3lzdGVtIFYgaW1wbGVtZW50YXRpaW9ucyBvbgorIyBwbGF0Zm9ybXMgd2hlcmUg dGhleSBhcmUgYXZhaWxhYmxlLiBDdXJyZW50bHkgdGhlcmUgYXJlIGxhcmdlICNpZmRlZgor IyBibG9ja3MgaW4gdGhlIHNvdXJjZSBmaWxlcywgYnV0IHdvdWxkIGJlIG5pY2VyIHRvIHNr aXAgY29tcGlsaW5nCisjIHRoZW0gYWx0b2dldGhlci4KK09CSlMgKz0gZHNtX2ltcGxfcG9z aXgubyBkc21faW1wbF9zeXN2Lm8gZHNtX2ltcGxfbW1hcC5vCitlbmRpZgorCiBpbmNsdWRl ICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2Rz bS5jCmluZGV4IGQzZjk4MmM1YjJhLi5lMDc3NWQ4YTk4NCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv ZHNtLmMKQEAgLTE0LDYgKzE0LDE4IEBACiAgKiBoYXJkIHBvc3RtYXN0ZXIgY3Jhc2gsIHJl bWFpbmluZyBzZWdtZW50cyB3aWxsIGJlIHJlbW92ZWQsIGlmIHRoZXkKICAqIHN0aWxsIGV4 aXN0LCBhdCB0aGUgbmV4dCBwb3N0bWFzdGVyIHN0YXJ0dXAuCiAgKgorICogVGhlc2Ugc2Vy dmljZXMgbWFuYWdlIHR3byBraW5kcyBvZiBzZWdtZW50czoKKyAqCisgKiAxLiBTZWdtZW50 cyBjYXJ2ZWQgb3V0IG9mIG9uZSAibWFpbiIgRFNNIHNlZ21lbnQKKyAqIDIuIFNlZ21lbnRz IGJhY2tlZCBieSBhIHNlcGFyYXRlIGxvdy1sZXZlbCBEU00gc2VnbWVudHMKKyAqCisgKiBF YWNoIHNlZ21lbnQgaXMgaWRlbnRpZmllZCBieSBhIDMyLWJpdCBpbnRlZ2VyIGhhbmRsZSAo ZHNtX2hhbmRsZSksCisgKiB3aGV0aGVyIGl0J3MgY2FydmVkIG91dCBvZiB0aGUgbWFpbiBy ZWdpb24gb3IgY3JlYXRlZCBhcyBhIHNlcGFyYXRlCisgKiBzZWdtZW50LiAgVGhlIGhhbmRs ZSBjYW4gYmUgdXNlZCBieSBvdGhlciBwcm9jZXNzZXMgdG8gZmluZCBhbmQgYXR0YWNoCisg KiB0byB0aGUgc2VnbWVudC4gIFNlZ21lbnRzIHRoYXQgYXJlIGJhY2tlZCBieSBhIGRlZGlj YXRlZCBsb3ctbGV2ZWwKKyAqIHNlZ21lbnQgYWxzbyBoYXZlIGEgc2VwYXJhdGUgZHNtX2lt cGxfaGFuZGxlLCB3aGljaCBpcyB1c2VkIHdpdGggdGhlCisgKiBsb3ctbGV2ZWwgZnVuY3Rp b25zIGluIGRzbV9pbXBsLmMuCisgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQogICoKQEAgLTY4LDcgKzgwLDEwIEBAIHN0cnVjdCBkc21fc2VnbWVudAogewog CWRsaXN0X25vZGUJbm9kZTsJCQkvKiBMaXN0IGxpbmsgaW4gZHNtX3NlZ21lbnRfbGlzdC4g Ki8KIAlSZXNvdXJjZU93bmVyIHJlc293bmVyOwkJLyogUmVzb3VyY2Ugb3duZXIuICovCi0J ZHNtX2hhbmRsZQloYW5kbGU7CQkJLyogU2VnbWVudCBuYW1lLiAqLworCWRzbV9oYW5kbGUJ aGFuZGxlOwkJCS8qIEhhbmRsZSBmb3Igb3RoZXIgYmFja2VuZHMgdG8gZmluZCB0aGlzCisJ CQkJCQkJCSAqIHNlZ21lbnQuICovCisJZHNtX2ltcGxfaGFuZGxlIGltcGxfaGFuZGxlOwkv KiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBoYW5kbGUuICovCisJYm9vbAkJaW5fbWFpbl9y ZWdpb247IC8qIElzIHRoaXMgc3RvcmVkIGluIHRoZSBtYWluIHNobSByZWdpb24/ICovCiAJ dWludDMyCQljb250cm9sX3Nsb3Q7CS8qIFNsb3QgaW4gY29udHJvbCBzZWdtZW50LiAqLwog CWRzbV9pbXBsX3ByaXZhdGUgaW1wbF9wcml2YXRlOwkvKiBJbXBsZW1lbnRhdGlvbi1zcGVj aWZpYyBwcml2YXRlIGRhdGEuICovCiAJdm9pZAkgICAqbWFwcGVkX2FkZHJlc3M7IC8qIE1h cHBpbmcgYWRkcmVzcywgb3IgTlVMTCBpZiB1bm1hcHBlZC4gKi8KQEAgLTgwLDEwICs5NSwx MyBAQCBzdHJ1Y3QgZHNtX3NlZ21lbnQKIHR5cGVkZWYgc3RydWN0IGRzbV9jb250cm9sX2l0 ZW0KIHsKIAlkc21faGFuZGxlCWhhbmRsZTsKKwlkc21faW1wbF9oYW5kbGUgaW1wbF9oYW5k bGU7CisJYm9vbAkJaW5fbWFpbl9yZWdpb247CiAJdWludDMyCQlyZWZjbnQ7CQkJLyogMisg PSBhY3RpdmUsIDEgPSBtb3JpYnVuZCwgMCA9IGdvbmUgKi8KIAlzaXplX3QJCWZpcnN0X3Bh Z2U7CiAJc2l6ZV90CQlucGFnZXM7Ci0JZHNtX2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgaW1w bF9wcml2YXRlX3BtX2hhbmRsZTsgLyogb25seSBuZWVkZWQgb24gV2luZG93cyAqLworCWRz bV9pbXBsX3ByaXZhdGVfcG1faGFuZGxlIGltcGxfcHJpdmF0ZV9wbV9oYW5kbGU7CS8qIG9u bHkgbmVlZGVkIG9uCisJCQkJCQkJCQkJCQkJCSAqIFdpbmRvd3MgKi8KIAlib29sCQlwaW5u ZWQ7CiB9IGRzbV9jb250cm9sX2l0ZW07CiAKQEAgLTEwMiw4ICsxMjAsNyBAQCBzdGF0aWMg ZHNtX3NlZ21lbnQgKmRzbV9jcmVhdGVfZGVzY3JpcHRvcih2b2lkKTsKIHN0YXRpYyBib29s IGRzbV9jb250cm9sX3NlZ21lbnRfc2FuZShkc21fY29udHJvbF9oZWFkZXIgKmNvbnRyb2ws CiAJCQkJCQkJCQkgU2l6ZSBtYXBwZWRfc2l6ZSk7CiBzdGF0aWMgdWludDY0IGRzbV9jb250 cm9sX2J5dGVzX25lZWRlZCh1aW50MzIgbml0ZW1zKTsKLXN0YXRpYyBpbmxpbmUgZHNtX2hh bmRsZSBtYWtlX21haW5fcmVnaW9uX2RzbV9oYW5kbGUoaW50IHNsb3QpOwotc3RhdGljIGlu bGluZSBib29sIGlzX21haW5fcmVnaW9uX2RzbV9oYW5kbGUoZHNtX2hhbmRsZSBoYW5kbGUp Oworc3RhdGljIGlubGluZSBkc21faGFuZGxlIG1ha2VfZHNtX2hhbmRsZShpbnQgc2xvdCk7 CiAKIC8qIEhhcyB0aGlzIGJhY2tlbmQgaW5pdGlhbGl6ZWQgdGhlIGR5bmFtaWMgc2hhcmVk IG1lbW9yeSBzeXN0ZW0geWV0PyAqLwogc3RhdGljIGJvb2wgZHNtX2luaXRfZG9uZSA9IGZh bHNlOwpAQCAtMTM3LDcgKzE1NCw3IEBAIHN0YXRpYyBkbGlzdF9oZWFkIGRzbV9zZWdtZW50 X2xpc3QgPSBETElTVF9TVEFUSUNfSU5JVChkc21fc2VnbWVudF9saXN0KTsKICAqIHJlZmVy ZW5jZSBjb3VudGVkOyBpbnN0ZWFkLCBpdCBsYXN0cyBmb3IgdGhlIHBvc3RtYXN0ZXIncyBl bnRpcmUKICAqIGxpZmUgY3ljbGUuICBGb3Igc2ltcGxpY2l0eSwgaXQgZG9lc24ndCBoYXZl IGEgZHNtX3NlZ21lbnQgb2JqZWN0IGVpdGhlci4KICAqLwotc3RhdGljIGRzbV9oYW5kbGUg ZHNtX2NvbnRyb2xfaGFuZGxlOworc3RhdGljIGRzbV9pbXBsX2hhbmRsZSBkc21fY29udHJv bF9oYW5kbGU7CiBzdGF0aWMgZHNtX2NvbnRyb2xfaGVhZGVyICpkc21fY29udHJvbDsKIHN0 YXRpYyBTaXplIGRzbV9jb250cm9sX21hcHBlZF9zaXplID0gMDsKIHN0YXRpYyBkc21faW1w bF9wcml2YXRlIGRzbV9jb250cm9sX2ltcGxfcHJpdmF0ZSA9IDA7CkBAIC0xOTksMzIgKzIx NiwxOSBAQCBkc21fcG9zdG1hc3Rlcl9zdGFydHVwKFBHU2htZW1IZWFkZXIgKnNoaW0pCiAJ CSBtYXhpdGVtcyk7CiAJc2Vnc2l6ZSA9IGRzbV9jb250cm9sX2J5dGVzX25lZWRlZChtYXhp dGVtcyk7CiAKLQkvKgotCSAqIExvb3AgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgaWRlbnRp ZmllciBmb3IgdGhlIG5ldyBjb250cm9sIHNlZ21lbnQuIFdlCi0JICogc29tZXRpbWVzIHVz ZSBEU01fSEFORExFX0lOVkFMSUQgYXMgYSBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nICJu bwotCSAqIGNvbnRyb2wgc2VnbWVudCIsIHNvIGF2b2lkIGdlbmVyYXRpbmcgdGhhdCB2YWx1 ZSBmb3IgYSByZWFsIGhhbmRsZS4KLQkgKi8KLQlmb3IgKDs7KQotCXsKLQkJQXNzZXJ0KGRz bV9jb250cm9sX2FkZHJlc3MgPT0gTlVMTCk7Ci0JCUFzc2VydChkc21fY29udHJvbF9tYXBw ZWRfc2l6ZSA9PSAwKTsKLQkJLyogVXNlIGV2ZW4gbnVtYmVycyBvbmx5ICovCi0JCWRzbV9j b250cm9sX2hhbmRsZSA9IHBnX3BybmdfdWludDMyKCZwZ19nbG9iYWxfcHJuZ19zdGF0ZSkg PDwgMTsKLQkJaWYgKGRzbV9jb250cm9sX2hhbmRsZSA9PSBEU01fSEFORExFX0lOVkFMSUQp Ci0JCQljb250aW51ZTsKLQkJaWYgKGRzbV9pbXBsX29wKERTTV9PUF9DUkVBVEUsIGRzbV9j b250cm9sX2hhbmRsZSwgc2Vnc2l6ZSwKLQkJCQkJCSZkc21fY29udHJvbF9pbXBsX3ByaXZh dGUsICZkc21fY29udHJvbF9hZGRyZXNzLAotCQkJCQkJJmRzbV9jb250cm9sX21hcHBlZF9z aXplLCBFUlJPUikpCi0JCQlicmVhazsKLQl9CisJLyogQ3JlYXRlIHRoZSBjb250cm9sIHNl Z21lbnQuICovCisJZHNtX2NvbnRyb2xfaGFuZGxlID0gZHNtX2ltcGwtPmNyZWF0ZShzZWdz aXplLAorCQkJCQkJCQkJCSAgJmRzbV9jb250cm9sX2ltcGxfcHJpdmF0ZSwgJmRzbV9jb250 cm9sX2FkZHJlc3MsCisJCQkJCQkJCQkJICBFUlJPUik7CiAJZHNtX2NvbnRyb2wgPSBkc21f Y29udHJvbF9hZGRyZXNzOworCWRzbV9jb250cm9sX21hcHBlZF9zaXplID0gc2Vnc2l6ZTsK IAlvbl9zaG1lbV9leGl0KGRzbV9wb3N0bWFzdGVyX3NodXRkb3duLCBQb2ludGVyR2V0RGF0 dW0oc2hpbSkpOwogCWVsb2coREVCVUcyLAogCQkgImNyZWF0ZWQgZHluYW1pYyBzaGFyZWQg bWVtb3J5IGNvbnRyb2wgc2VnbWVudCAldSAoJXp1IGJ5dGVzKSIsCiAJCSBkc21fY29udHJv bF9oYW5kbGUsIHNlZ3NpemUpOwogCXNoaW0tPmRzbV9jb250cm9sID0gZHNtX2NvbnRyb2xf aGFuZGxlOwogCi0JLyogSW5pdGlhbGl6ZSBjb250cm9sIHNlZ21lbnQuICovCisJLyogSW5p dGlhbGl6ZSBpdC4gKi8KIAlkc21fY29udHJvbC0+bWFnaWMgPSBQR19EWU5TSE1FTV9DT05U Uk9MX01BR0lDOwogCWRzbV9jb250cm9sLT5uaXRlbXMgPSAwOwogCWRzbV9jb250cm9sLT5t YXhpdGVtcyA9IG1heGl0ZW1zOwpAQCAtMjM2LDE0ICsyNDAsMTEgQEAgZHNtX3Bvc3RtYXN0 ZXJfc3RhcnR1cChQR1NobWVtSGVhZGVyICpzaGltKQogICogc2VnbWVudHMgdG8gd2hpY2gg aXQgcmVmZXJzLCBhbmQgdGhlbiB0aGUgY29udHJvbCBzZWdtZW50IGl0c2VsZi4KICAqLwog dm9pZAotZHNtX2NsZWFudXBfdXNpbmdfY29udHJvbF9zZWdtZW50KGRzbV9oYW5kbGUgb2xk X2NvbnRyb2xfaGFuZGxlKQorZHNtX2NsZWFudXBfdXNpbmdfY29udHJvbF9zZWdtZW50KGRz bV9pbXBsX2hhbmRsZSBvbGRfY29udHJvbF9oYW5kbGUpCiB7CiAJdm9pZAkgICAqbWFwcGVk X2FkZHJlc3MgPSBOVUxMOwotCXZvaWQJICAgKmp1bmtfbWFwcGVkX2FkZHJlc3MgPSBOVUxM OwogCWRzbV9pbXBsX3ByaXZhdGUgaW1wbF9wcml2YXRlID0gMDsKLQlkc21faW1wbF9wcml2 YXRlIGp1bmtfaW1wbF9wcml2YXRlID0gMDsKIAlTaXplCQltYXBwZWRfc2l6ZSA9IDA7Ci0J U2l6ZQkJanVua19tYXBwZWRfc2l6ZSA9IDA7CiAJdWludDMyCQluaXRlbXM7CiAJdWludDMy CQlpOwogCWRzbV9jb250cm9sX2hlYWRlciAqb2xkX2NvbnRyb2w7CkBAIC0yNTQsOCArMjU1 LDggQEAgZHNtX2NsZWFudXBfdXNpbmdfY29udHJvbF9zZWdtZW50KGRzbV9oYW5kbGUgb2xk X2NvbnRyb2xfaGFuZGxlKQogCSAqIGV4aXN0cywgb3IgYW4gdW5yZWxhdGVkIHByb2Nlc3Mg aGFzIHVzZWQgdGhlIHNhbWUgc2htIElELiAgU28ganVzdCBmYWxsCiAJICogb3V0IHF1aWV0 bHkuCiAJICovCi0JaWYgKCFkc21faW1wbF9vcChEU01fT1BfQVRUQUNILCBvbGRfY29udHJv bF9oYW5kbGUsIDAsICZpbXBsX3ByaXZhdGUsCi0JCQkJCSAmbWFwcGVkX2FkZHJlc3MsICZt YXBwZWRfc2l6ZSwgREVCVUcxKSkKKwlpZiAoIWRzbV9pbXBsLT5hdHRhY2gob2xkX2NvbnRy b2xfaGFuZGxlLCAmaW1wbF9wcml2YXRlLAorCQkJCQkJICAmbWFwcGVkX2FkZHJlc3MsICZt YXBwZWRfc2l6ZSwgREVCVUcxKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTI2NSw4ICsyNjYs OCBAQCBkc21fY2xlYW51cF91c2luZ19jb250cm9sX3NlZ21lbnQoZHNtX2hhbmRsZSBvbGRf Y29udHJvbF9oYW5kbGUpCiAJb2xkX2NvbnRyb2wgPSAoZHNtX2NvbnRyb2xfaGVhZGVyICop IG1hcHBlZF9hZGRyZXNzOwogCWlmICghZHNtX2NvbnRyb2xfc2VnbWVudF9zYW5lKG9sZF9j b250cm9sLCBtYXBwZWRfc2l6ZSkpCiAJewotCQlkc21faW1wbF9vcChEU01fT1BfREVUQUNI LCBvbGRfY29udHJvbF9oYW5kbGUsIDAsICZpbXBsX3ByaXZhdGUsCi0JCQkJCSZtYXBwZWRf YWRkcmVzcywgJm1hcHBlZF9zaXplLCBMT0cpOworCQlkc21faW1wbC0+ZGV0YWNoKG9sZF9j b250cm9sX2hhbmRsZSwgaW1wbF9wcml2YXRlLAorCQkJCQkJIG1hcHBlZF9hZGRyZXNzLCBt YXBwZWRfc2l6ZSwgTE9HKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjc3LDcgKzI3OCw3IEBA IGRzbV9jbGVhbnVwX3VzaW5nX2NvbnRyb2xfc2VnbWVudChkc21faGFuZGxlIG9sZF9jb250 cm9sX2hhbmRsZSkKIAluaXRlbXMgPSBvbGRfY29udHJvbC0+bml0ZW1zOwogCWZvciAoaSA9 IDA7IGkgPCBuaXRlbXM7ICsraSkKIAl7Ci0JCWRzbV9oYW5kbGUJaGFuZGxlOworCQlkc21f aW1wbF9oYW5kbGUgaGFuZGxlOwogCQl1aW50MzIJCXJlZmNudDsKIAogCQkvKiBJZiB0aGUg cmVmZXJlbmNlIGNvdW50IGlzIDAsIHRoZSBzbG90IGlzIGFjdHVhbGx5IHVudXNlZC4gKi8K QEAgLTI4Niw4ICsyODcsOCBAQCBkc21fY2xlYW51cF91c2luZ19jb250cm9sX3NlZ21lbnQo ZHNtX2hhbmRsZSBvbGRfY29udHJvbF9oYW5kbGUpCiAJCQljb250aW51ZTsKIAogCQkvKiBJ ZiBpdCB3YXMgdXNpbmcgdGhlIG1haW4gc2htZW0gYXJlYSwgdGhlcmUgaXMgbm90aGluZyB0 byBkby4gKi8KLQkJaGFuZGxlID0gb2xkX2NvbnRyb2wtPml0ZW1baV0uaGFuZGxlOwotCQlp ZiAoaXNfbWFpbl9yZWdpb25fZHNtX2hhbmRsZShoYW5kbGUpKQorCQloYW5kbGUgPSBvbGRf Y29udHJvbC0+aXRlbVtpXS5pbXBsX2hhbmRsZTsKKwkJaWYgKG9sZF9jb250cm9sLT5pdGVt W2ldLmluX21haW5fcmVnaW9uKQogCQkJY29udGludWU7CiAKIAkJLyogTG9nIGRlYnVnZ2lu ZyBpbmZvcm1hdGlvbi4gKi8KQEAgLTI5NSwxNiArMjk2LDE2IEBAIGRzbV9jbGVhbnVwX3Vz aW5nX2NvbnRyb2xfc2VnbWVudChkc21faGFuZGxlIG9sZF9jb250cm9sX2hhbmRsZSkKIAkJ CSBoYW5kbGUsIHJlZmNudCk7CiAKIAkJLyogRGVzdHJveSB0aGUgcmVmZXJlbmNlZCBzZWdt ZW50LiAqLwotCQlkc21faW1wbF9vcChEU01fT1BfREVTVFJPWSwgaGFuZGxlLCAwLCAmanVu a19pbXBsX3ByaXZhdGUsCi0JCQkJCSZqdW5rX21hcHBlZF9hZGRyZXNzLCAmanVua19tYXBw ZWRfc2l6ZSwgTE9HKTsKKwkJZHNtX2ltcGwtPmRlc3Ryb3koaGFuZGxlLCBMT0cpOwogCX0K IAogCS8qIERlc3Ryb3kgdGhlIG9sZCBjb250cm9sIHNlZ21lbnQsIHRvby4gKi8KIAllbG9n KERFQlVHMiwKIAkJICJjbGVhbmluZyB1cCBkeW5hbWljIHNoYXJlZCBtZW1vcnkgY29udHJv bCBzZWdtZW50IHdpdGggSUQgJXUiLAogCQkgb2xkX2NvbnRyb2xfaGFuZGxlKTsKLQlkc21f aW1wbF9vcChEU01fT1BfREVTVFJPWSwgb2xkX2NvbnRyb2xfaGFuZGxlLCAwLCAmaW1wbF9w cml2YXRlLAotCQkJCSZtYXBwZWRfYWRkcmVzcywgJm1hcHBlZF9zaXplLCBMT0cpOworCWRz bV9pbXBsLT5kZXRhY2gob2xkX2NvbnRyb2xfaGFuZGxlLCBpbXBsX3ByaXZhdGUsCisJCQkJ CSBtYXBwZWRfYWRkcmVzcywgbWFwcGVkX3NpemUsIExPRyk7CisJZHNtX2ltcGwtPmRlc3Ry b3kob2xkX2NvbnRyb2xfaGFuZGxlLCBMT0cpOwogfQogCiAvKgpAQCAtMzYxLDkgKzM2Miw2 IEBAIGRzbV9wb3N0bWFzdGVyX3NodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJdWlu dDMyCQluaXRlbXM7CiAJdWludDMyCQlpOwogCXZvaWQJICAgKmRzbV9jb250cm9sX2FkZHJl c3M7Ci0Jdm9pZAkgICAqanVua19tYXBwZWRfYWRkcmVzcyA9IE5VTEw7Ci0JZHNtX2ltcGxf cHJpdmF0ZSBqdW5rX2ltcGxfcHJpdmF0ZSA9IDA7Ci0JU2l6ZQkJanVua19tYXBwZWRfc2l6 ZSA9IDA7CiAJUEdTaG1lbUhlYWRlciAqc2hpbSA9IChQR1NobWVtSGVhZGVyICopIERhdHVt R2V0UG9pbnRlcihhcmcpOwogCiAJLyoKQEAgLTM4NCwyMyArMzgyLDIzIEBAIGRzbV9wb3N0 bWFzdGVyX3NodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJLyogUmVtb3ZlIGFueSBy ZW1haW5pbmcgc2VnbWVudHMuICovCiAJZm9yIChpID0gMDsgaSA8IG5pdGVtczsgKytpKQog CXsKLQkJZHNtX2hhbmRsZQloYW5kbGU7CisJCWRzbV9pbXBsX2hhbmRsZSBoYW5kbGU7CiAK IAkJLyogSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyAwLCB0aGUgc2xvdCBpcyBhY3R1YWxs eSB1bnVzZWQuICovCiAJCWlmIChkc21fY29udHJvbC0+aXRlbVtpXS5yZWZjbnQgPT0gMCkK IAkJCWNvbnRpbnVlOwogCi0JCWhhbmRsZSA9IGRzbV9jb250cm9sLT5pdGVtW2ldLmhhbmRs ZTsKLQkJaWYgKGlzX21haW5fcmVnaW9uX2RzbV9oYW5kbGUoaGFuZGxlKSkKKwkJaWYgKGRz bV9jb250cm9sLT5pdGVtW2ldLmluX21haW5fcmVnaW9uKQogCQkJY29udGludWU7CiAKKwkJ aGFuZGxlID0gZHNtX2NvbnRyb2wtPml0ZW1baV0uaW1wbF9oYW5kbGU7CisKIAkJLyogTG9n IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gKi8KIAkJZWxvZyhERUJVRzIsICJjbGVhbmluZyB1 cCBvcnBoYW5lZCBkeW5hbWljIHNoYXJlZCBtZW1vcnkgd2l0aCBJRCAldSIsCiAJCQkgaGFu ZGxlKTsKIAogCQkvKiBEZXN0cm95IHRoZSBzZWdtZW50LiAqLwotCQlkc21faW1wbF9vcChE U01fT1BfREVTVFJPWSwgaGFuZGxlLCAwLCAmanVua19pbXBsX3ByaXZhdGUsCi0JCQkJCSZq dW5rX21hcHBlZF9hZGRyZXNzLCAmanVua19tYXBwZWRfc2l6ZSwgTE9HKTsKKwkJZHNtX2lt cGwtPmRlc3Ryb3koaGFuZGxlLCBMT0cpOwogCX0KIAogCS8qIFJlbW92ZSB0aGUgY29udHJv bCBzZWdtZW50IGl0c2VsZi4gKi8KQEAgLTQwOCwxMSArNDA2LDEzIEBAIGRzbV9wb3N0bWFz dGVyX3NodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJCSAiY2xlYW5pbmcgdXAgZHlu YW1pYyBzaGFyZWQgbWVtb3J5IGNvbnRyb2wgc2VnbWVudCB3aXRoIElEICV1IiwKIAkJIGRz bV9jb250cm9sX2hhbmRsZSk7CiAJZHNtX2NvbnRyb2xfYWRkcmVzcyA9IGRzbV9jb250cm9s OwotCWRzbV9pbXBsX29wKERTTV9PUF9ERVNUUk9ZLCBkc21fY29udHJvbF9oYW5kbGUsIDAs Ci0JCQkJJmRzbV9jb250cm9sX2ltcGxfcHJpdmF0ZSwgJmRzbV9jb250cm9sX2FkZHJlc3Ms Ci0JCQkJJmRzbV9jb250cm9sX21hcHBlZF9zaXplLCBMT0cpOwotCWRzbV9jb250cm9sID0g ZHNtX2NvbnRyb2xfYWRkcmVzczsKLQlzaGltLT5kc21fY29udHJvbCA9IDA7CisJZHNtX2lt cGwtPmRldGFjaChkc21fY29udHJvbF9oYW5kbGUsCisJCQkJCSBkc21fY29udHJvbF9pbXBs X3ByaXZhdGUsIGRzbV9jb250cm9sX2FkZHJlc3MsCisJCQkJCSBkc21fY29udHJvbF9tYXBw ZWRfc2l6ZSwgTE9HKTsKKwlkc21faW1wbC0+ZGVzdHJveShkc21fY29udHJvbF9oYW5kbGUs IExPRyk7CisJZHNtX2NvbnRyb2wgPSBOVUxMOworCWRzbV9jb250cm9sX21hcHBlZF9zaXpl ID0gMDsKKwlzaGltLT5kc21fY29udHJvbCA9IERTTV9JTVBMX0hBTkRMRV9JTlZBTElEOwog fQogCiAvKgpAQCAtNDI5LDE3ICs0MjksMTcgQEAgZHNtX2JhY2tlbmRfc3RhcnR1cCh2b2lk KQogCQl2b2lkCSAgICpjb250cm9sX2FkZHJlc3MgPSBOVUxMOwogCiAJCS8qIEF0dGFjaCBj b250cm9sIHNlZ21lbnQuICovCi0JCUFzc2VydChkc21fY29udHJvbF9oYW5kbGUgIT0gMCk7 Ci0JCWRzbV9pbXBsX29wKERTTV9PUF9BVFRBQ0gsIGRzbV9jb250cm9sX2hhbmRsZSwgMCwK LQkJCQkJJmRzbV9jb250cm9sX2ltcGxfcHJpdmF0ZSwgJmNvbnRyb2xfYWRkcmVzcywKLQkJ CQkJJmRzbV9jb250cm9sX21hcHBlZF9zaXplLCBFUlJPUik7CisJCUFzc2VydChkc21fY29u dHJvbF9oYW5kbGUgIT0gRFNNX0hBTkRMRV9JTlZBTElEKTsKKwkJZHNtX2ltcGwtPmF0dGFj aChkc21fY29udHJvbF9oYW5kbGUsCisJCQkJCQkgJmRzbV9jb250cm9sX2ltcGxfcHJpdmF0 ZSwgJmNvbnRyb2xfYWRkcmVzcywKKwkJCQkJCSAmZHNtX2NvbnRyb2xfbWFwcGVkX3NpemUs IEVSUk9SKTsKIAkJZHNtX2NvbnRyb2wgPSBjb250cm9sX2FkZHJlc3M7CiAJCS8qIElmIGNv bnRyb2wgc2VnbWVudCBkb2Vzbid0IGxvb2sgc2FuZSwgc29tZXRoaW5nIGlzIGJhZGx5IHdy b25nLiAqLwogCQlpZiAoIWRzbV9jb250cm9sX3NlZ21lbnRfc2FuZShkc21fY29udHJvbCwg ZHNtX2NvbnRyb2xfbWFwcGVkX3NpemUpKQogCQl7Ci0JCQlkc21faW1wbF9vcChEU01fT1Bf REVUQUNILCBkc21fY29udHJvbF9oYW5kbGUsIDAsCi0JCQkJCQkmZHNtX2NvbnRyb2xfaW1w bF9wcml2YXRlLCAmY29udHJvbF9hZGRyZXNzLAotCQkJCQkJJmRzbV9jb250cm9sX21hcHBl ZF9zaXplLCBXQVJOSU5HKTsKKwkJCWRzbV9pbXBsLT5kZXRhY2goZHNtX2NvbnRyb2xfaGFu ZGxlLAorCQkJCQkJCSBkc21fY29udHJvbF9pbXBsX3ByaXZhdGUsIGNvbnRyb2xfYWRkcmVz cywKKwkJCQkJCQkgZHNtX2NvbnRyb2xfbWFwcGVkX3NpemUsIFdBUk5JTkcpOwogCQkJZXJl cG9ydChGQVRBTCwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJPUiksCiAJ CQkJCSBlcnJtc2coImR5bmFtaWMgc2hhcmVkIG1lbW9yeSBjb250cm9sIHNlZ21lbnQgaXMg bm90IHZhbGlkIikpKTsKQEAgLTQ1OSw3ICs0NTksOCBAQCBkc21fYmFja2VuZF9zdGFydHVw KHZvaWQpCiB2b2lkCiBkc21fc2V0X2NvbnRyb2xfaGFuZGxlKGRzbV9oYW5kbGUgaCkKIHsK LQlBc3NlcnQoZHNtX2NvbnRyb2xfaGFuZGxlID09IDAgJiYgaCAhPSAwKTsKKwlBc3NlcnQo ZHNtX2NvbnRyb2xfaGFuZGxlID09IERTTV9IQU5ETEVfSU5WQUxJRCk7CisJQXNzZXJ0KGgg IT0gRFNNX0hBTkRMRV9JTlZBTElEKTsKIAlkc21fY29udHJvbF9oYW5kbGUgPSBoOwogfQog I2VuZGlmCkBAIC01NjcsMTkgKzU2OCwxNSBAQCBkc21fY3JlYXRlKFNpemUgc2l6ZSwgaW50 IGZsYWdzKQogCQkgKi8KIAkJaWYgKGRzbV9tYWluX3NwYWNlX2ZwbSkKIAkJCUxXTG9ja1Jl bGVhc2UoRHluYW1pY1NoYXJlZE1lbW9yeUNvbnRyb2xMb2NrKTsKLQkJZm9yICg7OykKLQkJ ewotCQkJQXNzZXJ0KHNlZy0+bWFwcGVkX2FkZHJlc3MgPT0gTlVMTCAmJiBzZWctPm1hcHBl ZF9zaXplID09IDApOwotCQkJLyogVXNlIGV2ZW4gbnVtYmVycyBvbmx5ICovCi0JCQlzZWct PmhhbmRsZSA9IHBnX3BybmdfdWludDMyKCZwZ19nbG9iYWxfcHJuZ19zdGF0ZSkgPDwgMTsK LQkJCWlmIChzZWctPmhhbmRsZSA9PSBEU01fSEFORExFX0lOVkFMSUQpCS8qIFJlc2VydmUg c2VudGluZWwgKi8KLQkJCQljb250aW51ZTsKLQkJCWlmIChkc21faW1wbF9vcChEU01fT1Bf Q1JFQVRFLCBzZWctPmhhbmRsZSwgc2l6ZSwgJnNlZy0+aW1wbF9wcml2YXRlLAotCQkJCQkJ CSZzZWctPm1hcHBlZF9hZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6ZSwgRVJST1IpKQotCQkJ CWJyZWFrOwotCQl9CisKKwkJc2VnLT5pbXBsX2hhbmRsZSA9IGRzbV9pbXBsLT5jcmVhdGUo c2l6ZSwgJnNlZy0+aW1wbF9wcml2YXRlLAorCQkJCQkJCQkJCQkmc2VnLT5tYXBwZWRfYWRk cmVzcywgRVJST1IpOworCQlzZWctPm1hcHBlZF9zaXplID0gc2l6ZTsKIAkJTFdMb2NrQWNx dWlyZShEeW5hbWljU2hhcmVkTWVtb3J5Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7CiAJ fQorCWVsc2UKKwkJc2VnLT5pbXBsX2hhbmRsZSA9IERTTV9JTVBMX0hBTkRMRV9JTlZBTElE OworCXNlZy0+aW5fbWFpbl9yZWdpb24gPSB1c2luZ19tYWluX2RzbV9yZWdpb247CiAKIAkv KiBTZWFyY2ggdGhlIGNvbnRyb2wgc2VnbWVudCBmb3IgYW4gdW51c2VkIHNsb3QuICovCiAJ bml0ZW1zID0gZHNtX2NvbnRyb2wtPm5pdGVtczsKQEAgLTU4NywxNSArNTg0LDE2IEBAIGRz bV9jcmVhdGUoU2l6ZSBzaXplLCBpbnQgZmxhZ3MpCiAJewogCQlpZiAoZHNtX2NvbnRyb2wt Pml0ZW1baV0ucmVmY250ID09IDApCiAJCXsKKwkJCXNlZy0+aGFuZGxlID0gbWFrZV9kc21f aGFuZGxlKGkpOworCQkJc2VnLT5pbl9tYWluX3JlZ2lvbiA9IHVzaW5nX21haW5fZHNtX3Jl Z2lvbjsKKwkJCWRzbV9jb250cm9sLT5pdGVtW2ldLmluX21haW5fcmVnaW9uID0gdXNpbmdf bWFpbl9kc21fcmVnaW9uOworCQkJZHNtX2NvbnRyb2wtPml0ZW1baV0uaGFuZGxlID0gc2Vn LT5oYW5kbGU7CiAJCQlpZiAodXNpbmdfbWFpbl9kc21fcmVnaW9uKQogCQkJewotCQkJCXNl Zy0+aGFuZGxlID0gbWFrZV9tYWluX3JlZ2lvbl9kc21faGFuZGxlKGkpOwogCQkJCWRzbV9j b250cm9sLT5pdGVtW2ldLmZpcnN0X3BhZ2UgPSBmaXJzdF9wYWdlOwogCQkJCWRzbV9jb250 cm9sLT5pdGVtW2ldLm5wYWdlcyA9IG5wYWdlczsKIAkJCX0KLQkJCWVsc2UKLQkJCQlBc3Nl cnQoIWlzX21haW5fcmVnaW9uX2RzbV9oYW5kbGUoc2VnLT5oYW5kbGUpKTsKLQkJCWRzbV9j b250cm9sLT5pdGVtW2ldLmhhbmRsZSA9IHNlZy0+aGFuZGxlOworCQkJZHNtX2NvbnRyb2wt Pml0ZW1baV0uaW1wbF9oYW5kbGUgPSBzZWctPmltcGxfaGFuZGxlOwogCQkJLyogcmVmY250 IG9mIDEgdHJpZ2dlcnMgZGVzdHJ1Y3Rpb24sIHNvIHN0YXJ0IGF0IDIgKi8KIAkJCWRzbV9j b250cm9sLT5pdGVtW2ldLnJlZmNudCA9IDI7CiAJCQlkc21fY29udHJvbC0+aXRlbVtpXS5p bXBsX3ByaXZhdGVfcG1faGFuZGxlID0gMDsKQEAgLTYxMyw4ICs2MTEsMTMgQEAgZHNtX2Ny ZWF0ZShTaXplIHNpemUsIGludCBmbGFncykKIAkJCUZyZWVQYWdlTWFuYWdlclB1dChkc21f bWFpbl9zcGFjZV9mcG0sIGZpcnN0X3BhZ2UsIG5wYWdlcyk7CiAJCUxXTG9ja1JlbGVhc2Uo RHluYW1pY1NoYXJlZE1lbW9yeUNvbnRyb2xMb2NrKTsKIAkJaWYgKCF1c2luZ19tYWluX2Rz bV9yZWdpb24pCi0JCQlkc21faW1wbF9vcChEU01fT1BfREVTVFJPWSwgc2VnLT5oYW5kbGUs IDAsICZzZWctPmltcGxfcHJpdmF0ZSwKLQkJCQkJCSZzZWctPm1hcHBlZF9hZGRyZXNzLCAm c2VnLT5tYXBwZWRfc2l6ZSwgV0FSTklORyk7CisJCXsKKwkJCWRzbV9pbXBsLT5kZXRhY2go c2VnLT5pbXBsX2hhbmRsZSwgc2VnLT5pbXBsX3ByaXZhdGUsCisJCQkJCQkJIHNlZy0+bWFw cGVkX2FkZHJlc3MsIHNlZy0+bWFwcGVkX3NpemUsIFdBUk5JTkcpOworCQkJc2VnLT5tYXBw ZWRfYWRkcmVzcyA9IE5VTEw7CisJCQlzZWctPm1hcHBlZF9zaXplID0gMDsKKwkJCWRzbV9p bXBsLT5kZXN0cm95KHNlZy0+aW1wbF9oYW5kbGUsIFdBUk5JTkcpOworCQl9CiAJCWlmIChz ZWctPnJlc293bmVyICE9IE5VTEwpCiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0RFNNKHNlZy0+ cmVzb3duZXIsIHNlZyk7CiAJCWRsaXN0X2RlbGV0ZSgmc2VnLT5ub2RlKTsKQEAgLTYyOCwx MyArNjMxLDE1IEBAIGRzbV9jcmVhdGUoU2l6ZSBzaXplLCBpbnQgZmxhZ3MpCiAJfQogCiAJ LyogRW50ZXIgdGhlIGhhbmRsZSBpbnRvIGEgbmV3IGFycmF5IHNsb3QuICovCisJc2VnLT5o YW5kbGUgPSBtYWtlX2RzbV9oYW5kbGUobml0ZW1zKTsKKwlkc21fY29udHJvbC0+aXRlbVtu aXRlbXNdLmluX21haW5fcmVnaW9uID0gdXNpbmdfbWFpbl9kc21fcmVnaW9uOworCWRzbV9j b250cm9sLT5pdGVtW25pdGVtc10uaGFuZGxlID0gc2VnLT5oYW5kbGU7CiAJaWYgKHVzaW5n X21haW5fZHNtX3JlZ2lvbikKIAl7Ci0JCXNlZy0+aGFuZGxlID0gbWFrZV9tYWluX3JlZ2lv bl9kc21faGFuZGxlKG5pdGVtcyk7Ci0JCWRzbV9jb250cm9sLT5pdGVtW2ldLmZpcnN0X3Bh Z2UgPSBmaXJzdF9wYWdlOwotCQlkc21fY29udHJvbC0+aXRlbVtpXS5ucGFnZXMgPSBucGFn ZXM7CisJCWRzbV9jb250cm9sLT5pdGVtW25pdGVtc10uZmlyc3RfcGFnZSA9IGZpcnN0X3Bh Z2U7CisJCWRzbV9jb250cm9sLT5pdGVtW25pdGVtc10ubnBhZ2VzID0gbnBhZ2VzOwogCX0K LQlkc21fY29udHJvbC0+aXRlbVtuaXRlbXNdLmhhbmRsZSA9IHNlZy0+aGFuZGxlOworCWRz bV9jb250cm9sLT5pdGVtW25pdGVtc10uaW1wbF9oYW5kbGUgPSBzZWctPmltcGxfaGFuZGxl OwogCS8qIHJlZmNudCBvZiAxIHRyaWdnZXJzIGRlc3RydWN0aW9uLCBzbyBzdGFydCBhdCAy ICovCiAJZHNtX2NvbnRyb2wtPml0ZW1bbml0ZW1zXS5yZWZjbnQgPSAyOwogCWRzbV9jb250 cm9sLT5pdGVtW25pdGVtc10uaW1wbF9wcml2YXRlX3BtX2hhbmRsZSA9IDA7CkBAIC03MTks NyArNzI0LDkgQEAgZHNtX2F0dGFjaChkc21faGFuZGxlIGgpCiAJCS8qIE90aGVyd2lzZSB3 ZSd2ZSBmb3VuZCBhIG1hdGNoLiAqLwogCQlkc21fY29udHJvbC0+aXRlbVtpXS5yZWZjbnQr KzsKIAkJc2VnLT5jb250cm9sX3Nsb3QgPSBpOwotCQlpZiAoaXNfbWFpbl9yZWdpb25fZHNt X2hhbmRsZShzZWctPmhhbmRsZSkpCisJCXNlZy0+aW5fbWFpbl9yZWdpb24gPSBkc21fY29u dHJvbC0+aXRlbVtpXS5pbl9tYWluX3JlZ2lvbjsKKwkJc2VnLT5pbXBsX2hhbmRsZSA9IGRz bV9jb250cm9sLT5pdGVtW2ldLmltcGxfaGFuZGxlOworCQlpZiAoc2VnLT5pbl9tYWluX3Jl Z2lvbikKIAkJewogCQkJc2VnLT5tYXBwZWRfYWRkcmVzcyA9IChjaGFyICopIGRzbV9tYWlu X3NwYWNlX2JlZ2luICsKIAkJCQlkc21fY29udHJvbC0+aXRlbVtpXS5maXJzdF9wYWdlICog RlBNX1BBR0VfU0laRTsKQEAgLTc0Miw5ICs3NDksOSBAQCBkc21fYXR0YWNoKGRzbV9oYW5k bGUgaCkKIAl9CiAKIAkvKiBIZXJlJ3Mgd2hlcmUgd2UgYWN0dWFsbHkgdHJ5IHRvIG1hcCB0 aGUgc2VnbWVudC4gKi8KLQlpZiAoIWlzX21haW5fcmVnaW9uX2RzbV9oYW5kbGUoc2VnLT5o YW5kbGUpKQotCQlkc21faW1wbF9vcChEU01fT1BfQVRUQUNILCBzZWctPmhhbmRsZSwgMCwg JnNlZy0+aW1wbF9wcml2YXRlLAotCQkJCQkmc2VnLT5tYXBwZWRfYWRkcmVzcywgJnNlZy0+ bWFwcGVkX3NpemUsIEVSUk9SKTsKKwlpZiAoIXNlZy0+aW5fbWFpbl9yZWdpb24pCisJCWRz bV9pbXBsLT5hdHRhY2goc2VnLT5pbXBsX2hhbmRsZSwgJnNlZy0+aW1wbF9wcml2YXRlLAor CQkJCQkJICZzZWctPm1hcHBlZF9hZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6ZSwgRVJST1Ip OwogCiAJcmV0dXJuIHNlZzsKIH0KQEAgLTc4Niw5ICs3OTMsMTMgQEAgZHNtX2RldGFjaF9h bGwodm9pZCkKIAl9CiAKIAlpZiAoY29udHJvbF9hZGRyZXNzICE9IE5VTEwpCi0JCWRzbV9p bXBsX29wKERTTV9PUF9ERVRBQ0gsIGRzbV9jb250cm9sX2hhbmRsZSwgMCwKLQkJCQkJJmRz bV9jb250cm9sX2ltcGxfcHJpdmF0ZSwgJmNvbnRyb2xfYWRkcmVzcywKLQkJCQkJJmRzbV9j b250cm9sX21hcHBlZF9zaXplLCBFUlJPUik7CisJeworCQlkc21faW1wbC0+ZGV0YWNoKGRz bV9jb250cm9sX2hhbmRsZSwKKwkJCQkJCSBkc21fY29udHJvbF9pbXBsX3ByaXZhdGUsIGNv bnRyb2xfYWRkcmVzcywKKwkJCQkJCSBkc21fY29udHJvbF9tYXBwZWRfc2l6ZSwgRVJST1Ip OworCQlkc21fY29udHJvbCA9IE5VTEw7CisJCWRzbV9jb250cm9sX21hcHBlZF9zaXplID0g MDsKKwl9CiB9CiAKIC8qCkBAIC04MzksOSArODUwLDkgQEAgZHNtX2RldGFjaChkc21fc2Vn bWVudCAqc2VnKQogCSAqLwogCWlmIChzZWctPm1hcHBlZF9hZGRyZXNzICE9IE5VTEwpCiAJ ewotCQlpZiAoIWlzX21haW5fcmVnaW9uX2RzbV9oYW5kbGUoc2VnLT5oYW5kbGUpKQotCQkJ ZHNtX2ltcGxfb3AoRFNNX09QX0RFVEFDSCwgc2VnLT5oYW5kbGUsIDAsICZzZWctPmltcGxf cHJpdmF0ZSwKLQkJCQkJCSZzZWctPm1hcHBlZF9hZGRyZXNzLCAmc2VnLT5tYXBwZWRfc2l6 ZSwgV0FSTklORyk7CisJCWlmICghc2VnLT5pbl9tYWluX3JlZ2lvbikKKwkJCWRzbV9pbXBs LT5kZXRhY2goc2VnLT5pbXBsX2hhbmRsZSwgc2VnLT5pbXBsX3ByaXZhdGUsCisJCQkJCQkJ IHNlZy0+bWFwcGVkX2FkZHJlc3MsIHNlZy0+bWFwcGVkX3NpemUsIFdBUk5JTkcpOwogCQlz ZWctPmltcGxfcHJpdmF0ZSA9IDA7CiAJCXNlZy0+bWFwcGVkX2FkZHJlc3MgPSBOVUxMOwog CQlzZWctPm1hcHBlZF9zaXplID0gMDsKQEAgLTg1NSw2ICs4NjYsOCBAQCBkc21fZGV0YWNo KGRzbV9zZWdtZW50ICpzZWcpCiAKIAkJTFdMb2NrQWNxdWlyZShEeW5hbWljU2hhcmVkTWVt b3J5Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7CiAJCUFzc2VydChkc21fY29udHJvbC0+ aXRlbVtjb250cm9sX3Nsb3RdLmhhbmRsZSA9PSBzZWctPmhhbmRsZSk7CisJCUFzc2VydChk c21fY29udHJvbC0+aXRlbVtjb250cm9sX3Nsb3RdLmluX21haW5fcmVnaW9uID09IHNlZy0+ aW5fbWFpbl9yZWdpb24pOworCQlBc3NlcnQoZHNtX2NvbnRyb2wtPml0ZW1bY29udHJvbF9z bG90XS5pbXBsX2hhbmRsZSA9PSBzZWctPmltcGxfaGFuZGxlKTsKIAkJQXNzZXJ0KGRzbV9j b250cm9sLT5pdGVtW2NvbnRyb2xfc2xvdF0ucmVmY250ID4gMSk7CiAJCXJlZmNudCA9IC0t ZHNtX2NvbnRyb2wtPml0ZW1bY29udHJvbF9zbG90XS5yZWZjbnQ7CiAJCXNlZy0+Y29udHJv bF9zbG90ID0gSU5WQUxJRF9DT05UUk9MX1NMT1Q7CkBAIC04ODEsMTYgKzg5NCwxNyBAQCBk c21fZGV0YWNoKGRzbV9zZWdtZW50ICpzZWcpCiAJCQkgKiBvdGhlciByZWFzb24sIHRoZSBw b3N0bWFzdGVyIG1heSBub3QgaGF2ZSBhbnkgYmV0dGVyIGx1Y2sgdGhhbgogCQkJICogd2Ug ZGlkLiAgVGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhhdCwgdGhvdWdoLgog CQkJICovCi0JCQlpZiAoaXNfbWFpbl9yZWdpb25fZHNtX2hhbmRsZShzZWctPmhhbmRsZSkg fHwKLQkJCQlkc21faW1wbF9vcChEU01fT1BfREVTVFJPWSwgc2VnLT5oYW5kbGUsIDAsICZz ZWctPmltcGxfcHJpdmF0ZSwKLQkJCQkJCQkmc2VnLT5tYXBwZWRfYWRkcmVzcywgJnNlZy0+ bWFwcGVkX3NpemUsIFdBUk5JTkcpKQorCQkJaWYgKHNlZy0+aW5fbWFpbl9yZWdpb24gfHwK KwkJCQlkc21faW1wbC0+ZGVzdHJveShzZWctPmltcGxfaGFuZGxlLCBXQVJOSU5HKSkKIAkJ CXsKIAkJCQlMV0xvY2tBY3F1aXJlKER5bmFtaWNTaGFyZWRNZW1vcnlDb250cm9sTG9jaywg TFdfRVhDTFVTSVZFKTsKLQkJCQlpZiAoaXNfbWFpbl9yZWdpb25fZHNtX2hhbmRsZShzZWct PmhhbmRsZSkpCisJCQkJaWYgKHNlZy0+aW5fbWFpbl9yZWdpb24pCiAJCQkJCUZyZWVQYWdl TWFuYWdlclB1dCgoRnJlZVBhZ2VNYW5hZ2VyICopIGRzbV9tYWluX3NwYWNlX2JlZ2luLAog CQkJCQkJCQkJICAgZHNtX2NvbnRyb2wtPml0ZW1bY29udHJvbF9zbG90XS5maXJzdF9wYWdl LAogCQkJCQkJCQkJICAgZHNtX2NvbnRyb2wtPml0ZW1bY29udHJvbF9zbG90XS5ucGFnZXMp OwogCQkJCUFzc2VydChkc21fY29udHJvbC0+aXRlbVtjb250cm9sX3Nsb3RdLmhhbmRsZSA9 PSBzZWctPmhhbmRsZSk7CisJCQkJQXNzZXJ0KGRzbV9jb250cm9sLT5pdGVtW2NvbnRyb2xf c2xvdF0uaW5fbWFpbl9yZWdpb24gPT0gc2VnLT5pbl9tYWluX3JlZ2lvbik7CisJCQkJQXNz ZXJ0KGRzbV9jb250cm9sLT5pdGVtW2NvbnRyb2xfc2xvdF0uaW1wbF9oYW5kbGUgPT0gc2Vn LT5pbXBsX2hhbmRsZSk7CiAJCQkJQXNzZXJ0KGRzbV9jb250cm9sLT5pdGVtW2NvbnRyb2xf c2xvdF0ucmVmY250ID09IDEpOwogCQkJCWRzbV9jb250cm9sLT5pdGVtW2NvbnRyb2xfc2xv dF0ucmVmY250ID0gMDsKIAkJCQlMV0xvY2tSZWxlYXNlKER5bmFtaWNTaGFyZWRNZW1vcnlD b250cm9sTG9jayk7CkBAIC05NjYsOCArOTgwLDggQEAgZHNtX3Bpbl9zZWdtZW50KGRzbV9z ZWdtZW50ICpzZWcpCiAJTFdMb2NrQWNxdWlyZShEeW5hbWljU2hhcmVkTWVtb3J5Q29udHJv bExvY2ssIExXX0VYQ0xVU0lWRSk7CiAJaWYgKGRzbV9jb250cm9sLT5pdGVtW3NlZy0+Y29u dHJvbF9zbG90XS5waW5uZWQpCiAJCWVsb2coRVJST1IsICJjYW5ub3QgcGluIGEgc2VnbWVu dCB0aGF0IGlzIGFscmVhZHkgcGlubmVkIik7Ci0JaWYgKCFpc19tYWluX3JlZ2lvbl9kc21f aGFuZGxlKHNlZy0+aGFuZGxlKSkKLQkJZHNtX2ltcGxfcGluX3NlZ21lbnQoc2VnLT5oYW5k bGUsIHNlZy0+aW1wbF9wcml2YXRlLCAmcG1faGFuZGxlKTsKKwlpZiAoIXNlZy0+aW5fbWFp bl9yZWdpb24pCisJCWRzbV9pbXBsLT5waW5fc2VnbWVudChzZWctPmltcGxfaGFuZGxlLCBz ZWctPmltcGxfcHJpdmF0ZSwgJnBtX2hhbmRsZSk7CiAJZHNtX2NvbnRyb2wtPml0ZW1bc2Vn LT5jb250cm9sX3Nsb3RdLnBpbm5lZCA9IHRydWU7CiAJZHNtX2NvbnRyb2wtPml0ZW1bc2Vn LT5jb250cm9sX3Nsb3RdLnJlZmNudCsrOwogCWRzbV9jb250cm9sLT5pdGVtW3NlZy0+Y29u dHJvbF9zbG90XS5pbXBsX3ByaXZhdGVfcG1faGFuZGxlID0gcG1faGFuZGxlOwpAQCAtOTkx LDYgKzEwMDUsOCBAQCBkc21fdW5waW5fc2VnbWVudChkc21faGFuZGxlIGhhbmRsZSkKIAl1 aW50MzIJCWNvbnRyb2xfc2xvdCA9IElOVkFMSURfQ09OVFJPTF9TTE9UOwogCWJvb2wJCWRl c3Ryb3kgPSBmYWxzZTsKIAl1aW50MzIJCWk7CisJYm9vbAkJaW5fbWFpbl9yZWdpb24gPSBm YWxzZTsKKwlkc21faW1wbF9oYW5kbGUgaW1wbF9oYW5kbGUgPSBEU01fSU1QTF9IQU5ETEVf SU5WQUxJRDsKIAogCS8qIEZpbmQgdGhlIGNvbnRyb2wgc2xvdCBmb3IgdGhlIGdpdmVuIGhh bmRsZS4gKi8KIAlMV0xvY2tBY3F1aXJlKER5bmFtaWNTaGFyZWRNZW1vcnlDb250cm9sTG9j aywgTFdfRVhDTFVTSVZFKTsKQEAgLTEwMDQsNiArMTAyMCw4IEBAIGRzbV91bnBpbl9zZWdt ZW50KGRzbV9oYW5kbGUgaGFuZGxlKQogCQlpZiAoZHNtX2NvbnRyb2wtPml0ZW1baV0uaGFu ZGxlID09IGhhbmRsZSkKIAkJewogCQkJY29udHJvbF9zbG90ID0gaTsKKwkJCWluX21haW5f cmVnaW9uID0gZHNtX2NvbnRyb2wtPml0ZW1baV0uaW5fbWFpbl9yZWdpb247CisJCQlpbXBs X2hhbmRsZSA9IGRzbV9jb250cm9sLT5pdGVtW2ldLmltcGxfaGFuZGxlOwogCQkJYnJlYWs7 CiAJCX0KIAl9CkBAIC0xMDI0LDkgKzEwNDIsMTIgQEAgZHNtX3VucGluX3NlZ21lbnQoZHNt X2hhbmRsZSBoYW5kbGUpCiAJICogcmVsZWFzaW5nIHRoZSBsb2NrLCBiZWNhdXNlIGltcGxf cHJpdmF0ZV9wbV9oYW5kbGUgbWF5IGdldCBtb2RpZmllZCBieQogCSAqIGRzbV9pbXBsX3Vu cGluX3NlZ21lbnQuCiAJICovCi0JaWYgKCFpc19tYWluX3JlZ2lvbl9kc21faGFuZGxlKGhh bmRsZSkpCi0JCWRzbV9pbXBsX3VucGluX3NlZ21lbnQoaGFuZGxlLAotCQkJCQkJCSAgICZk c21fY29udHJvbC0+aXRlbVtjb250cm9sX3Nsb3RdLmltcGxfcHJpdmF0ZV9wbV9oYW5kbGUp OworCWlmICghaW5fbWFpbl9yZWdpb24pCisJeworCQlkc21faW1wbC0+dW5waW5fc2VnbWVu dChpbXBsX2hhbmRsZSwKKwkJCQkJCQkJZHNtX2NvbnRyb2wtPml0ZW1bY29udHJvbF9zbG90 XS5pbXBsX3ByaXZhdGVfcG1faGFuZGxlKTsKKwkJZHNtX2NvbnRyb2wtPml0ZW1bY29udHJv bF9zbG90XS5pbXBsX3ByaXZhdGVfcG1faGFuZGxlID0gMDsKKwl9CiAKIAkvKiBOb3RlIHRo YXQgMSBtZWFucyBubyByZWZlcmVuY2VzICgwIG1lYW5zIHVudXNlZCBzbG90KS4gKi8KIAlp ZiAoLS1kc21fY29udHJvbC0+aXRlbVtjb250cm9sX3Nsb3RdLnJlZmNudCA9PSAxKQpAQCAt MTAzOSwyNiArMTA2MCwxNSBAQCBkc21fdW5waW5fc2VnbWVudChkc21faGFuZGxlIGhhbmRs ZSkKIAkvKiBDbGVhbiB1cCByZXNvdXJjZXMgaWYgdGhhdCB3YXMgdGhlIGxhc3QgcmVmZXJl bmNlLiAqLwogCWlmIChkZXN0cm95KQogCXsKLQkJZHNtX2ltcGxfcHJpdmF0ZSBqdW5rX2lt cGxfcHJpdmF0ZSA9IDA7Ci0JCXZvaWQJICAgKmp1bmtfbWFwcGVkX2FkZHJlc3MgPSBOVUxM OwotCQlTaXplCQlqdW5rX21hcHBlZF9zaXplID0gMDsKLQogCQkvKgogCQkgKiBGb3IgYW4g ZXhwbGFuYXRpb24gb2YgaG93IGVycm9yIGhhbmRsaW5nIHdvcmtzIGluIHRoaXMgY2FzZSwg c2VlCi0JCSAqIGNvbW1lbnRzIGluIGRzbV9kZXRhY2guICBOb3RlIHRoYXQgaWYgd2UgcmVh Y2ggdGhpcyBwb2ludCwgdGhlCi0JCSAqIGN1cnJlbnQgcHJvY2VzcyBjZXJ0YWlubHkgZG9l cyBub3QgaGF2ZSB0aGUgc2VnbWVudCBtYXBwZWQsIGJlY2F1c2UKLQkJICogaWYgaXQgZGlk LCB0aGUgcmVmZXJlbmNlIGNvdW50IHdvdWxkIGhhdmUgc3RpbGwgYmVlbiBncmVhdGVyIHRo YW4gMQotCQkgKiBldmVuIGFmdGVyIHJlbGVhc2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IGhl bGQgYnkgdGhlIHBpbi4gIFRoZSBmYWN0Ci0JCSAqIHRoYXQgdGhlcmUgY2FuJ3QgYmUgYSBk c21fc2VnbWVudCBmb3IgdGhpcyBoYW5kbGUgbWFrZXMgaXQgT0sgdG8KLQkJICogcGFzcyB0 aGUgbWFwcGVkIHNpemUsIG1hcHBlZCBhZGRyZXNzLCBhbmQgcHJpdmF0ZSBkYXRhIGFzIE5V TEwKLQkJICogaGVyZS4KKwkJICogY29tbWVudHMgaW4gZHNtX2RldGFjaC4KIAkJICovCi0J CWlmIChpc19tYWluX3JlZ2lvbl9kc21faGFuZGxlKGhhbmRsZSkgfHwKLQkJCWRzbV9pbXBs X29wKERTTV9PUF9ERVNUUk9ZLCBoYW5kbGUsIDAsICZqdW5rX2ltcGxfcHJpdmF0ZSwKLQkJ CQkJCSZqdW5rX21hcHBlZF9hZGRyZXNzLCAmanVua19tYXBwZWRfc2l6ZSwgV0FSTklORykp CisJCWlmIChpbl9tYWluX3JlZ2lvbiB8fAorCQkJZHNtX2ltcGwtPmRlc3Ryb3koaW1wbF9o YW5kbGUsIFdBUk5JTkcpKQogCQl7CiAJCQlMV0xvY2tBY3F1aXJlKER5bmFtaWNTaGFyZWRN ZW1vcnlDb250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkJCWlmIChpc19tYWluX3JlZ2lv bl9kc21faGFuZGxlKGhhbmRsZSkpCisJCQlpZiAoaW5fbWFpbl9yZWdpb24pCiAJCQkJRnJl ZVBhZ2VNYW5hZ2VyUHV0KChGcmVlUGFnZU1hbmFnZXIgKikgZHNtX21haW5fc3BhY2VfYmVn aW4sCiAJCQkJCQkJCSAgIGRzbV9jb250cm9sLT5pdGVtW2NvbnRyb2xfc2xvdF0uZmlyc3Rf cGFnZSwKIAkJCQkJCQkJICAgZHNtX2NvbnRyb2wtPml0ZW1bY29udHJvbF9zbG90XS5ucGFn ZXMpOwpAQCAtMTIwOSw3ICsxMjE5LDEwIEBAIGRzbV9jcmVhdGVfZGVzY3JpcHRvcih2b2lk KQogCXNlZyA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2Yo ZHNtX3NlZ21lbnQpKTsKIAlkbGlzdF9wdXNoX2hlYWQoJmRzbV9zZWdtZW50X2xpc3QsICZz ZWctPm5vZGUpOwogCi0JLyogc2VnLT5oYW5kbGUgbXVzdCBiZSBpbml0aWFsaXplZCBieSB0 aGUgY2FsbGVyICovCisJLyoKKwkgKiBzZWctPmhhbmRsZSwgc2VnLT5pbl9tYWluX3JlZ2lv biwgYW5kIHNlZy0+aW1wbF9oYW5kbGUgbXVzdCBiZQorCSAqIGluaXRpYWxpemVkIGJ5IHRo ZSBjYWxsZXIuCisJICovCiAJc2VnLT5jb250cm9sX3Nsb3QgPSBJTlZBTElEX0NPTlRST0xf U0xPVDsKIAlzZWctPmltcGxfcHJpdmF0ZSA9IDA7CiAJc2VnLT5tYXBwZWRfYWRkcmVzcyA9 IE5VTEw7CkBAIC0xMjU5LDI5ICsxMjcyLDI1IEBAIGRzbV9jb250cm9sX2J5dGVzX25lZWRl ZCh1aW50MzIgbml0ZW1zKQogCQkrIHNpemVvZihkc21fY29udHJvbF9pdGVtKSAqICh1aW50 NjQpIG5pdGVtczsKIH0KIAorLyoKKyAqIEdlbmVyYXRlIGEgbmV3IGhhbmRsZSB0aGF0IGNh biBiZSB1c2VkIGJ5IGFueSBiYWNrZW5kIHByb2Nlc3MgdG8gaWRlbnRpZnkgYQorICogRFNN IHNlZ21lbnQuCisgKi8KIHN0YXRpYyBpbmxpbmUgZHNtX2hhbmRsZQotbWFrZV9tYWluX3Jl Z2lvbl9kc21faGFuZGxlKGludCBzbG90KQorbWFrZV9kc21faGFuZGxlKGludCBzbG90KQog ewogCWRzbV9oYW5kbGUJaGFuZGxlOwogCiAJLyoKLQkgKiBXZSBuZWVkIHRvIGNyZWF0ZSBh IGhhbmRsZSB0aGF0IGRvZXNuJ3QgY29sbGlkZSB3aXRoIGFueSBleGlzdGluZyBleHRyYQot CSAqIHNlZ21lbnQgY3JlYXRlZCBieSBkc21faW1wbF9vcCgpLCBzbyB3ZSdsbCBtYWtlIGl0 IG9kZC4gIEl0IGFsc28KLQkgKiBtdXN0bid0IGNvbGxpZGUgd2l0aCBhbnkgb3RoZXIgbWFp biBhcmVhIHBzZXVkby1zZWdtZW50LCBzbyB3ZSdsbAotCSAqIGluY2x1ZGUgdGhlIHNsb3Qg bnVtYmVyIGluIHNvbWUgb2YgdGhlIGJpdHMuICBXZSBhbHNvIHdhbnQgdG8gbWFrZSBhbgot CSAqIGVmZm9ydCB0byBhdm9pZCBuZXdseSBjcmVhdGVkIGFuZCByZWNlbnRseSBkZXN0cm95 ZWQgaGFuZGxlcyBmcm9tIGJlaW5nCi0JICogY29uZnVzZWQsIHNvIHdlJ2xsIG1ha2UgdGhl IHJlc3Qgb2YgdGhlIGJpdHMgcmFuZG9tLgorCSAqIEl0IG11c3RuJ3QgY29sbGlkZSB3aXRo IGFueSBvdGhlciBzZWdtZW50LCBzbyB3ZSBpbmNsdWRlIHRoZSBzbG90CisJICogbnVtYmVy IGluIHNvbWUgb2YgdGhlIGJpdHMuICBXZSBhbHNvIHdhbnQgdG8gbWFrZSBhbiBlZmZvcnQg dG8gYXZvaWQKKwkgKiBuZXdseSBjcmVhdGVkIGFuZCByZWNlbnRseSBkZXN0cm95ZWQgaGFu ZGxlcyBmcm9tIGJlaW5nIGNvbmZ1c2VkLCBzbyB3ZQorCSAqIG1ha2UgdGhlIHJlc3Qgb2Yg dGhlIGJpdHMgcmFuZG9tLgogCSAqLwotCWhhbmRsZSA9IDE7Ci0JaGFuZGxlIHw9IHNsb3Qg PDwgMTsKLQloYW5kbGUgfD0gcGdfcHJuZ191aW50MzIoJnBnX2dsb2JhbF9wcm5nX3N0YXRl KSA8PCAocGdfbGVmdG1vc3Rfb25lX3BvczMyKGRzbV9jb250cm9sLT5tYXhpdGVtcykgKyAx KTsKLQlyZXR1cm4gaGFuZGxlOwotfQorCWhhbmRsZSA9IHNsb3Q7CisJaGFuZGxlIHw9IHBn X3BybmdfdWludDMyKCZwZ19nbG9iYWxfcHJuZ19zdGF0ZSkgPDwgKHBnX2xlZnRtb3N0X29u ZV9wb3MzMihkc21fY29udHJvbC0+bWF4aXRlbXMpKTsKIAotc3RhdGljIGlubGluZSBib29s Ci1pc19tYWluX3JlZ2lvbl9kc21faGFuZGxlKGRzbV9oYW5kbGUgaGFuZGxlKQotewotCXJl dHVybiBoYW5kbGUgJiAxOworCXJldHVybiBoYW5kbGU7CiB9CiAKIC8qIFJlc291cmNlT3du ZXIgY2FsbGJhY2tzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9k c21faW1wbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGwuYwppbmRleCA0 NDc4YzU4YmI3Mi4uY2VkMjk4YTg3MjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2RzbV9pbXBsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2lt cGwuYwpAQCAtMyw3ICszLDcgQEAKICAqIGRzbV9pbXBsLmMKICAqCSAgbWFuYWdlIGR5bmFt aWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50cwogICoKLSAqIFRoaXMgZmlsZSBwcm92aWRlcyBs b3ctbGV2ZWwgQVBJcyBmb3IgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgc2hhcmVkCisgKiAn ZHNtX2ltcGwnIHByb3ZpZGVzIGxvdy1sZXZlbCBBUElzIGZvciBjcmVhdGluZyBhbmQgZGVz dHJveWluZyBzaGFyZWQKICAqIG1lbW9yeSBzZWdtZW50cyB1c2luZyBzZXZlcmFsIGRpZmZl cmVudCBwb3NzaWJsZSB0ZWNobmlxdWVzLiAgV2UgcmVmZXIKICAqIHRvIHRoZXNlIHNlZ21l bnRzIGFzIGR5bmFtaWMgYmVjYXVzZSB0aGV5IGNhbiBiZSBjcmVhdGVkLCBhbHRlcmVkLCBh bmQKICAqIGRlc3Ryb3llZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSBzZXJ2ZXIgbGlmZSBj eWNsZS4gIFRoaXMgaXMgdW5saWtlCkBAIC0zNiw2ICszNiwxMSBAQAogICoKICAqIEFzIGV2 ZXIsIFdpbmRvd3MgcmVxdWlyZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbi4KICAqCisgKiBU aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhcmUgaW4gc2VwYXJhdGUgc291cmNlIGZp bGVzIGluIHRoaXMKKyAqIGRpcmVjdG9yeS4gVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmV3IGZ1 bmN0aW9ucyBzaGFyZWQgYnkgZGlmZmVyZW50CisgKiBpbXBsZW1lbnRhdGlvbnMgYW5kIHRo ZSBHVUMgc3VwcG9ydCB0byByb3V0ZSBjYWxscyB0byB0aGUgY3VycmVudGx5CisgKiBhY3Rp dmUgaW1wbGVtZW50YXRpb24uCisgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQogICoKQEAgLTQ4LDQ5ICs1Myw4IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRl IDx1bmlzdGQuaD4KLSNpZm5kZWYgV0lOMzIKLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2lu Y2x1ZGUgPHN5cy9pcGMuaD4KLSNpbmNsdWRlIDxzeXMvc2htLmg+Ci0jaW5jbHVkZSA8c3lz L3N0YXQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVybS5oIgotI2lu Y2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCi0jaW5j bHVkZSAicGdzdGF0LmgiCi0jaW5jbHVkZSAicG9ydGFiaWxpdHkvbWVtLmgiCi0jaW5jbHVk ZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9kc21faW1w bC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKLSNpbmNsdWRlICJ1dGlscy9ndWMuaCIK LSNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgotCi0jaWZkZWYgVVNFX0RTTV9QT1NJWAot c3RhdGljIGJvb2wgZHNtX2ltcGxfcG9zaXgoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRs ZSwgU2l6ZSByZXF1ZXN0X3NpemUsCi0JCQkJCQkgICBkc21faW1wbF9wcml2YXRlICppbXBs X3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywKLQkJCQkJCSAgIFNpemUgKm1hcHBl ZF9zaXplLCBpbnQgZWxldmVsKTsKLXN0YXRpYyBpbnQJZHNtX2ltcGxfcG9zaXhfcmVzaXpl KGludCBmZCwgb2ZmX3Qgc2l6ZSk7Ci0jZW5kaWYKLSNpZmRlZiBVU0VfRFNNX1NZU1YKLXN0 YXRpYyBib29sIGRzbV9pbXBsX3N5c3YoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwg U2l6ZSByZXF1ZXN0X3NpemUsCi0JCQkJCQkgIGRzbV9pbXBsX3ByaXZhdGUgKmltcGxfcHJp dmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLAotCQkJCQkJICBTaXplICptYXBwZWRfc2l6 ZSwgaW50IGVsZXZlbCk7Ci0jZW5kaWYKLSNpZmRlZiBVU0VfRFNNX1dJTkRPV1MKLXN0YXRp YyBib29sIGRzbV9pbXBsX3dpbmRvd3MoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwg U2l6ZSByZXF1ZXN0X3NpemUsCi0JCQkJCQkJIGRzbV9pbXBsX3ByaXZhdGUgKmltcGxfcHJp dmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLAotCQkJCQkJCSBTaXplICptYXBwZWRfc2l6 ZSwgaW50IGVsZXZlbCk7Ci0jZW5kaWYKLSNpZmRlZiBVU0VfRFNNX01NQVAKLXN0YXRpYyBi b29sIGRzbV9pbXBsX21tYXAoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSBy ZXF1ZXN0X3NpemUsCi0JCQkJCQkgIGRzbV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwg dm9pZCAqKm1hcHBlZF9hZGRyZXNzLAotCQkJCQkJICBTaXplICptYXBwZWRfc2l6ZSwgaW50 IGVsZXZlbCk7Ci0jZW5kaWYKLXN0YXRpYyBpbnQJZXJyY29kZV9mb3JfZHluYW1pY19zaGFy ZWRfbWVtb3J5KHZvaWQpOworI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogCiBjb25z dCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgZHluYW1pY19zaGFyZWRfbWVtb3J5X29wdGlv bnNbXSA9IHsKICNpZmRlZiBVU0VfRFNNX1BPU0lYCkBAIC0xMTQsOTQwICs3OCw2MCBAQCBp bnQJCQlkeW5hbWljX3NoYXJlZF9tZW1vcnlfdHlwZSA9IERFRkFVTFRfRFlOQU1JQ19TSEFS RURfTUVNT1JZX1RZUEU7CiAvKiBBbW91bnQgb2Ygc3BhY2UgcmVzZXJ2ZWQgZm9yIERTTSBz ZWdtZW50cyBpbiB0aGUgbWFpbiBhcmVhLiAqLwogaW50CQkJbWluX2R5bmFtaWNfc2hhcmVk X21lbW9yeTsKIAotLyogU2l6ZSBvZiBidWZmZXIgdG8gYmUgdXNlZCBmb3IgemVyby1maWxs aW5nLiAqLwotI2RlZmluZSBaQlVGRkVSX1NJWkUJCQkJODE5MgorY29uc3QgZHNtX2ltcGxf b3BzICpkc21faW1wbDsKIAotI2RlZmluZSBTRUdNRU5UX05BTUVfUFJFRklYCQkJIkdsb2Jh bC9Qb3N0Z3JlU1FMIgotCi0vKi0tLS0tLQotICogUGVyZm9ybSBhIGxvdy1sZXZlbCBzaGFy ZWQgbWVtb3J5IG9wZXJhdGlvbiBpbiBhIHBsYXRmb3JtLXNwZWNpZmljIHdheSwKLSAqIGFz IGRpY3RhdGVkIGJ5IHRoZSBzZWxlY3RlZCBpbXBsZW1lbnRhdGlvbi4gIEVhY2ggaW1wbGVt ZW50YXRpb24gaXMKLSAqIHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIHBy aW1pdGl2ZXMuCi0gKgotICogRFNNX09QX0NSRUFURS4gIENyZWF0ZSBhIHNlZ21lbnQgd2hv c2Ugc2l6ZSBpcyB0aGUgcmVxdWVzdF9zaXplIGFuZAotICogbWFwIGl0LgotICoKLSAqIERT TV9PUF9BVFRBQ0guICBNYXAgdGhlIHNlZ21lbnQsIHdob3NlIHNpemUgbXVzdCBiZSB0aGUg cmVxdWVzdF9zaXplLgotICoKLSAqIERTTV9PUF9ERVRBQ0guICBVbm1hcCB0aGUgc2VnbWVu dC4KLSAqCi0gKiBEU01fT1BfREVTVFJPWS4gIFVubWFwIHRoZSBzZWdtZW50LCBpZiBpdCBp cyBtYXBwZWQuICBEZXN0cm95IHRoZQotICogc2VnbWVudC4KLSAqCi0gKiBBcmd1bWVudHM6 Ci0gKgkgb3A6IFRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkLgotICoJIGhhbmRsZTog VGhlIGhhbmRsZSBvZiBhbiBleGlzdGluZyBvYmplY3QsIG9yIGZvciBEU01fT1BfQ1JFQVRF LCB0aGUKLSAqCSAgIGlkZW50aWZpZXIgZm9yIHRoZSBuZXcgaGFuZGxlIHRoZSBjYWxsZXIg d2FudHMgY3JlYXRlZC4KLSAqCSByZXF1ZXN0X3NpemU6IEZvciBEU01fT1BfQ1JFQVRFLCB0 aGUgcmVxdWVzdGVkIHNpemUuICBPdGhlcndpc2UsIDAuCi0gKgkgaW1wbF9wcml2YXRlOiBQ cml2YXRlLCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBkYXRhLiAgV2lsbCBiZSBhIHBvaW50 ZXIKLSAqCSAgIHRvIE5VTEwgZm9yIHRoZSBmaXJzdCBvcGVyYXRpb24gb24gYSBzaGFyZWQg bWVtb3J5IHNlZ21lbnQgd2l0aGluIHRoaXMKLSAqCSAgIGJhY2tlbmQ7IHRoZXJlYWZ0ZXIs IGl0IHdpbGwgcG9pbnQgdG8gdGhlIHZhbHVlIHRvIHdoaWNoIGl0IHdhcyBzZXQKLSAqCSAg IG9uIHRoZSBwcmV2aW91cyBjYWxsLgotICoJIG1hcHBlZF9hZGRyZXNzOiBQb2ludGVyIHRv IHN0YXJ0IG9mIGN1cnJlbnQgbWFwcGluZzsgcG9pbnRlciB0byBOVUxMCi0gKgkgICBpZiBu b25lLiAgVXBkYXRlZCB3aXRoIG5ldyBtYXBwaW5nIGFkZHJlc3MuCi0gKgkgbWFwcGVkX3Np emU6IFBvaW50ZXIgdG8gc2l6ZSBvZiBjdXJyZW50IG1hcHBpbmc7IHBvaW50ZXIgdG8gMCBp ZiBub25lLgotICoJICAgVXBkYXRlZCB3aXRoIG5ldyBtYXBwZWQgc2l6ZS4KLSAqCSBlbGV2 ZWw6IExldmVsIGF0IHdoaWNoIHRvIGxvZyBlcnJvcnMuCi0gKgotICogUmV0dXJuIHZhbHVl OiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuICBXaGVuIGZhbHNlIGlzIHJl dHVybmVkLAotICogYSBtZXNzYWdlIHNob3VsZCBmaXJzdCBiZSBsb2dnZWQgYXQgdGhlIHNw ZWNpZmllZCBlbGV2ZWwsIGV4Y2VwdCBpbiB0aGUKLSAqIGNhc2Ugd2hlcmUgRFNNX09QX0NS RUFURSBleHBlcmllbmNlcyBhIG5hbWUgY29sbGlzaW9uLCB3aGljaCBzaG91bGQKLSAqIHNp bGVudGx5IHJldHVybiBmYWxzZS4KLSAqLS0tLS0KLSAqLwotYm9vbAotZHNtX2ltcGxfb3Ao ZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3NpemUsCi0JCQlk c21faW1wbF9wcml2YXRlICppbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywg U2l6ZSAqbWFwcGVkX3NpemUsCi0JCQlpbnQgZWxldmVsKQoraW50CitlcnJjb2RlX2Zvcl9k eW5hbWljX3NoYXJlZF9tZW1vcnkodm9pZCkKIHsKLQlBc3NlcnQob3AgPT0gRFNNX09QX0NS RUFURSB8fCByZXF1ZXN0X3NpemUgPT0gMCk7Ci0JQXNzZXJ0KChvcCAhPSBEU01fT1BfQ1JF QVRFICYmIG9wICE9IERTTV9PUF9BVFRBQ0gpIHx8Ci0JCSAgICgqbWFwcGVkX2FkZHJlc3Mg PT0gTlVMTCAmJiAqbWFwcGVkX3NpemUgPT0gMCkpOworCWlmIChlcnJubyA9PSBFRkJJRyB8 fCBlcnJubyA9PSBFTk9NRU0pCisJCXJldHVybiBlcnJjb2RlKEVSUkNPREVfT1VUX09GX01F TU9SWSk7CisJZWxzZQorCQlyZXR1cm4gZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKTsKK30K IAotCXN3aXRjaCAoZHluYW1pY19zaGFyZWRfbWVtb3J5X3R5cGUpCit2b2lkCithc3NpZ25f ZHluYW1pY19zaGFyZWRfbWVtb3J5X3R5cGUoaW50IG5ld19keW5hbWljX3NoYXJlZF9tZW1v cnlfdHlwZSwgdm9pZCAqZXh0cmEpCit7CisJc3dpdGNoIChuZXdfZHluYW1pY19zaGFyZWRf bWVtb3J5X3R5cGUpCiAJewogI2lmZGVmIFVTRV9EU01fUE9TSVgKIAkJY2FzZSBEU01fSU1Q TF9QT1NJWDoKLQkJCXJldHVybiBkc21faW1wbF9wb3NpeChvcCwgaGFuZGxlLCByZXF1ZXN0 X3NpemUsIGltcGxfcHJpdmF0ZSwKLQkJCQkJCQkJICBtYXBwZWRfYWRkcmVzcywgbWFwcGVk X3NpemUsIGVsZXZlbCk7CisJCQlkc21faW1wbCA9ICZkc21faW1wbF9wb3NpeF9vcHM7CisJ CQlicmVhazsKICNlbmRpZgogI2lmZGVmIFVTRV9EU01fU1lTVgogCQljYXNlIERTTV9JTVBM X1NZU1Y6Ci0JCQlyZXR1cm4gZHNtX2ltcGxfc3lzdihvcCwgaGFuZGxlLCByZXF1ZXN0X3Np emUsIGltcGxfcHJpdmF0ZSwKLQkJCQkJCQkJIG1hcHBlZF9hZGRyZXNzLCBtYXBwZWRfc2l6 ZSwgZWxldmVsKTsKKwkJCWRzbV9pbXBsID0gJmRzbV9pbXBsX3N5c3Zfb3BzOworCQkJYnJl YWs7CiAjZW5kaWYKICNpZmRlZiBVU0VfRFNNX1dJTkRPV1MKIAkJY2FzZSBEU01fSU1QTF9X SU5ET1dTOgotCQkJcmV0dXJuIGRzbV9pbXBsX3dpbmRvd3Mob3AsIGhhbmRsZSwgcmVxdWVz dF9zaXplLCBpbXBsX3ByaXZhdGUsCi0JCQkJCQkJCQltYXBwZWRfYWRkcmVzcywgbWFwcGVk X3NpemUsIGVsZXZlbCk7CisJCQlkc21faW1wbCA9ICZkc21faW1wbF93aW5kb3dzX29wczsK KwkJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgVVNFX0RTTV9NTUFQCiAJCWNhc2UgRFNNX0lN UExfTU1BUDoKLQkJCXJldHVybiBkc21faW1wbF9tbWFwKG9wLCBoYW5kbGUsIHJlcXVlc3Rf c2l6ZSwgaW1wbF9wcml2YXRlLAotCQkJCQkJCQkgbWFwcGVkX2FkZHJlc3MsIG1hcHBlZF9z aXplLCBlbGV2ZWwpOworCQkJZHNtX2ltcGwgPSAmZHNtX2ltcGxfbW1hcF9vcHM7CisJCQli cmVhazsKICNlbmRpZgogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQg ZHluYW1pYyBzaGFyZWQgbWVtb3J5IHR5cGU6ICVkIiwKLQkJCQkgZHluYW1pY19zaGFyZWRf bWVtb3J5X3R5cGUpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJCSBuZXdfZHluYW1pY19zaGFy ZWRfbWVtb3J5X3R5cGUpOwogCX0KIH0KIAotI2lmZGVmIFVTRV9EU01fUE9TSVgKIC8qCi0g KiBPcGVyYXRpbmcgc3lzdGVtIHByaW1pdGl2ZXMgdG8gc3VwcG9ydCBQT1NJWCBzaGFyZWQg bWVtb3J5LgotICoKLSAqIFBPU0lYIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYXJlIGNyZWF0 ZWQgYW5kIGF0dGFjaGVkIHVzaW5nIHNobV9vcGVuKCkKLSAqIGFuZCBzaG1fdW5saW5rKCk7 IG90aGVyIG9wZXJhdGlvbnMsIHN1Y2ggYXMgc2l6aW5nIG9yIG1hcHBpbmcgdGhlCi0gKiBz ZWdtZW50LCBhcmUgcGVyZm9ybWVkIGFzIGlmIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnRz IHdlcmUgZmlsZXMuCi0gKgotICogSW5kZWVkLCBvbiBzb21lIHBsYXRmb3JtcywgdGhleSBt YXkgYmUgaW1wbGVtZW50ZWQgdGhhdCB3YXkuICBXaGlsZQotICogUE9TSVggc2hhcmVkIG1l bW9yeSBzZWdtZW50cyBzZWVtIGludGVuZGVkIHRvIGV4aXN0IGluIGEgZmxhdCBuYW1lc3Bh Y2UsCi0gKiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIG1heSBpbXBsZW1lbnQgdGhlbSBhcyBm aWxlcywgZXZlbiBnb2luZyBzbyBmYXIKLSAqIHRvIHRyZWF0IGEgcmVxdWVzdCBmb3IgL3h5 eiBhcyBhIHJlcXVlc3QgdG8gY3JlYXRlIGEgZmlsZSBieSB0aGF0IG5hbWUKLSAqIGluIHRo ZSByb290IGRpcmVjdG9yeS4gIFVzZXJzIG9mIHN1Y2ggYnJva2VuIHBsYXRmb3JtcyBzaG91 bGQgc2VsZWN0Ci0gKiBhIGRpZmZlcmVudCBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9u LgotICovCi1zdGF0aWMgYm9vbAotZHNtX2ltcGxfcG9zaXgoZHNtX29wIG9wLCBkc21faGFu ZGxlIGhhbmRsZSwgU2l6ZSByZXF1ZXN0X3NpemUsCi0JCQkgICBkc21faW1wbF9wcml2YXRl ICppbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywgU2l6ZSAqbWFwcGVkX3Np emUsCi0JCQkgICBpbnQgZWxldmVsKQotewotCWNoYXIJCW5hbWVbNjRdOwotCWludAkJCWZs YWdzOwotCWludAkJCWZkOwotCWNoYXIJICAgKmFkZHJlc3M7Ci0KLQlzbnByaW50ZihuYW1l LCA2NCwgIi9Qb3N0Z3JlU1FMLiV1IiwgaGFuZGxlKTsKLQotCS8qIEhhbmRsZSB0ZWFyZG93 biBjYXNlcy4gKi8KLQlpZiAob3AgPT0gRFNNX09QX0RFVEFDSCB8fCBvcCA9PSBEU01fT1Bf REVTVFJPWSkKLQl7Ci0JCWlmICgqbWFwcGVkX2FkZHJlc3MgIT0gTlVMTAotCQkJJiYgbXVu bWFwKCptYXBwZWRfYWRkcmVzcywgKm1hcHBlZF9zaXplKSAhPSAwKQotCQl7Ci0JCQllcmVw b3J0KGVsZXZlbCwKLQkJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgp LAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgdW5tYXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50 IFwiJXNcIjogJW0iLAotCQkJCQkJCW5hbWUpKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0K LQkJKm1hcHBlZF9hZGRyZXNzID0gTlVMTDsKLQkJKm1hcHBlZF9zaXplID0gMDsKLQkJaWYg KG9wID09IERTTV9PUF9ERVNUUk9ZICYmIHNobV91bmxpbmsobmFtZSkgIT0gMCkKLQkJewot CQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9t ZW1vcnkoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IHJlbW92ZSBzaGFyZWQgbWVtb3J5 IHNlZ21lbnQgXCIlc1wiOiAlbSIsCi0JCQkJCQkJbmFtZSkpKTsKLQkJCXJldHVybiBmYWxz ZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIENyZWF0ZSBuZXcgc2Vn bWVudCBvciBvcGVuIGFuIGV4aXN0aW5nIG9uZSBmb3IgYXR0YWNoLgotCSAqCi0JICogRXZl biB0aG91Z2ggd2Ugd2lsbCBjbG9zZSB0aGUgRkQgYmVmb3JlIHJldHVybmluZywgaXQgc2Vl bXMgZGVzaXJhYmxlCi0JICogdG8gdXNlIFJlc2VydmUvUmVsZWFzZUV4dGVybmFsRkQsIHRv IHJlZHVjZSB0aGUgcHJvYmFiaWxpdHkgb2YgRU1GSUxFCi0JICogZmFpbHVyZS4gIFRoZSBm YWN0IHRoYXQgd2Ugd29uJ3QgaG9sZCB0aGUgRkQgb3BlbiBsb25nIGp1c3RpZmllcyB1c2lu ZwotCSAqIFJlc2VydmVFeHRlcm5hbEZEIHJhdGhlciB0aGFuIEFjcXVpcmVFeHRlcm5hbEZE LCB0aG91Z2guCi0JICovCi0JUmVzZXJ2ZUV4dGVybmFsRkQoKTsKLQotCWZsYWdzID0gT19S RFdSIHwgKG9wID09IERTTV9PUF9DUkVBVEUgPyBPX0NSRUFUIHwgT19FWENMIDogMCk7Ci0J aWYgKChmZCA9IHNobV9vcGVuKG5hbWUsIGZsYWdzLCBQR19GSUxFX01PREVfT1dORVIpKSA9 PSAtMSkKLQl7Ci0JCVJlbGVhc2VFeHRlcm5hbEZEKCk7Ci0JCWlmIChvcCA9PSBEU01fT1Bf QVRUQUNIIHx8IGVycm5vICE9IEVFWElTVCkKLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQko ZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCi0JCQkJCSBlcnJtc2coImNv dWxkIG5vdCBvcGVuIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKLQkJCQkJ CQluYW1lKSkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoKLQkgKiBJZiB3ZSdyZSBh dHRhY2hpbmcgdGhlIHNlZ21lbnQsIGRldGVybWluZSB0aGUgY3VycmVudCBzaXplOyBpZiB3 ZSBhcmUKLQkgKiBjcmVhdGluZyB0aGUgc2VnbWVudCwgc2V0IHRoZSBzaXplIHRvIHRoZSBy ZXF1ZXN0ZWQgdmFsdWUuCi0JICovCi0JaWYgKG9wID09IERTTV9PUF9BVFRBQ0gpCi0Jewot CQlzdHJ1Y3Qgc3RhdCBzdDsKLQotCQlpZiAoZnN0YXQoZmQsICZzdCkgIT0gMCkKLQkJewot CQkJaW50CQkJc2F2ZV9lcnJubzsKLQotCQkJLyogQmFjayBvdXQgd2hhdCdzIGFscmVhZHkg YmVlbiBkb25lLiAqLwotCQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCQkJY2xvc2UoZmQpOwot CQkJUmVsZWFzZUV4dGVybmFsRkQoKTsKLQkJCWVycm5vID0gc2F2ZV9lcnJubzsKLQotCQkJ ZXJlcG9ydChlbGV2ZWwsCi0JCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1v cnkoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXQgc2hhcmVkIG1lbW9yeSBzZWdt ZW50IFwiJXNcIjogJW0iLAotCQkJCQkJCW5hbWUpKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0J CX0KLQkJcmVxdWVzdF9zaXplID0gc3Quc3Rfc2l6ZTsKLQl9Ci0JZWxzZSBpZiAoZHNtX2lt cGxfcG9zaXhfcmVzaXplKGZkLCByZXF1ZXN0X3NpemUpICE9IDApCi0JewotCQlpbnQJCQlz YXZlX2Vycm5vOwotCi0JCS8qIEJhY2sgb3V0IHdoYXQncyBhbHJlYWR5IGJlZW4gZG9uZS4g Ki8KLQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCQljbG9zZShmZCk7Ci0JCVJlbGVhc2VFeHRl cm5hbEZEKCk7Ci0JCXNobV91bmxpbmsobmFtZSk7Ci0JCWVycm5vID0gc2F2ZV9lcnJubzsK LQotCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkoZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRf bWVtb3J5KCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IHJlc2l6ZSBzaGFyZWQgbWVtb3J5 IHNlZ21lbnQgXCIlc1wiIHRvICV6dSBieXRlczogJW0iLAotCQkJCQkJbmFtZSwgcmVxdWVz dF9zaXplKSkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyogTWFwIGl0LiAqLwotCWFk ZHJlc3MgPSBtbWFwKE5VTEwsIHJlcXVlc3Rfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklU RSwKLQkJCQkgICBNQVBfU0hBUkVEIHwgTUFQX0hBU1NFTUFQSE9SRSB8IE1BUF9OT1NZTkMs IGZkLCAwKTsKLQlpZiAoYWRkcmVzcyA9PSBNQVBfRkFJTEVEKQotCXsKLQkJaW50CQkJc2F2 ZV9lcnJubzsKLQotCQkvKiBCYWNrIG91dCB3aGF0J3MgYWxyZWFkeSBiZWVuIGRvbmUuICov Ci0JCXNhdmVfZXJybm8gPSBlcnJubzsKLQkJY2xvc2UoZmQpOwotCQlSZWxlYXNlRXh0ZXJu YWxGRCgpOwotCQlpZiAob3AgPT0gRFNNX09QX0NSRUFURSkKLQkJCXNobV91bmxpbmsobmFt ZSk7Ci0JCWVycm5vID0gc2F2ZV9lcnJubzsKLQotCQllcmVwb3J0KGVsZXZlbCwKLQkJCQko ZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCi0JCQkJIGVycm1zZygiY291 bGQgbm90IG1hcCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCi0JCQkJCQlu YW1lKSkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCSptYXBwZWRfYWRkcmVzcyA9IGFkZHJl c3M7Ci0JKm1hcHBlZF9zaXplID0gcmVxdWVzdF9zaXplOwotCWNsb3NlKGZkKTsKLQlSZWxl YXNlRXh0ZXJuYWxGRCgpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBTZXQgdGhl IHNpemUgb2YgYSB2aXJ0dWFsIG1lbW9yeSByZWdpb24gYXNzb2NpYXRlZCB3aXRoIGEgZmls ZSBkZXNjcmlwdG9yLgotICogSWYgbmVjZXNzYXJ5LCBhbHNvIGVuc3VyZSB0aGF0IHZpcnR1 YWwgbWVtb3J5IGlzIGFjdHVhbGx5IGFsbG9jYXRlZCBieSB0aGUKLSAqIG9wZXJhdGluZyBz eXN0ZW0sIHRvIGF2b2lkIG5hc3R5IHN1cnByaXNlcyBsYXRlci4KLSAqCi0gKiBSZXR1cm5z IG5vbi16ZXJvIGlmIGVpdGhlciB0cnVuY2F0aW9uIG9yIGFsbG9jYXRpb24gZmFpbHMsIGFu ZCBzZXRzIGVycm5vLgotICovCi1zdGF0aWMgaW50Ci1kc21faW1wbF9wb3NpeF9yZXNpemUo aW50IGZkLCBvZmZfdCBzaXplKQotewotCWludAkJCXJjOwotCWludAkJCXNhdmVfZXJybm87 Ci0Jc2lnc2V0X3QJc2F2ZV9zaWdtYXNrOwotCi0JLyoKLQkgKiBCbG9jayBhbGwgYmxvY2th YmxlIHNpZ25hbHMsIGV4Y2VwdCBTSUdRVUlULiAgcG9zaXhfZmFsbG9jYXRlKCkgY2FuIHJ1 bgotCSAqIGZvciBxdWl0ZSBhIGxvbmcgdGltZSwgYW5kIGlzIGFuIGFsbC1vci1ub3RoaW5n IG9wZXJhdGlvbi4gIElmIHdlCi0JICogYWxsb3dlZCBTSUdVU1IxIHRvIGludGVycnVwdCB1 cyByZXBlYXRlZGx5IChmb3IgZXhhbXBsZSwgZHVlIHRvCi0JICogcmVjb3ZlcnkgY29uZmxp Y3RzKSwgdGhlIHJldHJ5IGxvb3AgbWlnaHQgbmV2ZXIgc3VjY2VlZC4KLQkgKi8KLQlpZiAo SXNVbmRlclBvc3RtYXN0ZXIpCi0JCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmQmxvY2tT aWcsICZzYXZlX3NpZ21hc2spOwotCi0JcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRf RVZFTlRfRFNNX0FMTE9DQVRFKTsKLSNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFMTE9DQVRF KSAmJiBkZWZpbmVkKF9fbGludXhfXykKLQotCS8qCi0JICogT24gTGludXgsIGEgc2htX29w ZW4gZmQgaXMgYmFja2VkIGJ5IGEgdG1wZnMgZmlsZS4gIElmIHdlIHdlcmUgdG8gdXNlCi0J ICogZnRydW5jYXRlLCB0aGUgZmlsZSB3b3VsZCBjb250YWluIGEgaG9sZS4gIEFjY2Vzc2lu ZyBtZW1vcnkgYmFja2VkIGJ5IGEKLQkgKiBob2xlIGNhdXNlcyB0bXBmcyB0byBhbGxvY2F0 ZSBwYWdlcywgd2hpY2ggZmFpbHMgd2l0aCBTSUdCVVMgaWYgdGhlcmUKLQkgKiBpcyBubyBt b3JlIHRtcGZzIHNwYWNlIGF2YWlsYWJsZS4gIFNvIHdlIGFzayB0bXBmcyB0byBhbGxvY2F0 ZSBwYWdlcwotCSAqIGhlcmUsIHNvIHdlIGNhbiBmYWlsIGdyYWNlZnVsbHkgd2l0aCBFTk9T UEMgbm93IHJhdGhlciB0aGFuIHJpc2tpbmcKLQkgKiBTSUdCVVMgbGF0ZXIuCi0JICoKLQkg KiBXZSBzdGlsbCB1c2UgYSB0cmFkaXRpb25hbCBFSU5UUiByZXRyeSBsb29wIHRvIGhhbmRs ZSBTSUdDT05ULgotCSAqIHBvc2l4X2ZhbGxvY2F0ZSgpIGRvZXNuJ3QgcmVzdGFydCBhdXRv bWF0aWNhbGx5LCBhbmQgd2UgZG9uJ3Qgd2FudCB0aGlzCi0JICogdG8gZmFpbCBpZiB5b3Ug YXR0YWNoIGEgZGVidWdnZXIuCi0JICovCi0JZG8KLQl7Ci0JCXJjID0gcG9zaXhfZmFsbG9j YXRlKGZkLCAwLCBzaXplKTsKLQl9IHdoaWxlIChyYyA9PSBFSU5UUik7Ci0KLQkvKgotCSAq IFRoZSBjYWxsZXIgZXhwZWN0cyBlcnJubyB0byBiZSBzZXQsIGJ1dCBwb3NpeF9mYWxsb2Nh dGUoKSBkb2Vzbid0IHNldAotCSAqIGl0LiAgSW5zdGVhZCBpdCByZXR1cm5zIGVycm9yIG51 bWJlcnMgZGlyZWN0bHkuICBTbyBzZXQgZXJybm8sIGV2ZW4KLQkgKiB0aG91Z2ggd2UnbGwg YWxzbyByZXR1cm4gcmMgdG8gaW5kaWNhdGUgc3VjY2VzcyBvciBmYWlsdXJlLgotCSAqLwot CWVycm5vID0gcmM7Ci0jZWxzZQotCS8qIEV4dGVuZCB0aGUgZmlsZSB0byB0aGUgcmVxdWVz dGVkIHNpemUuICovCi0JZG8KLQl7Ci0JCXJjID0gZnRydW5jYXRlKGZkLCBzaXplKTsKLQl9 IHdoaWxlIChyYyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotI2VuZGlmCi0JcGdzdGF0X3Jl cG9ydF93YWl0X2VuZCgpOwotCi0JaWYgKElzVW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJc2F2 ZV9lcnJubyA9IGVycm5vOwotCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNhdmVfc2ln bWFzaywgTlVMTCk7Ci0JCWVycm5vID0gc2F2ZV9lcnJubzsKLQl9Ci0KLQlyZXR1cm4gcmM7 Ci19Ci0KLSNlbmRpZgkJCQkJCQkvKiBVU0VfRFNNX1BPU0lYICovCi0KLSNpZmRlZiBVU0Vf RFNNX1NZU1YKLS8qCi0gKiBPcGVyYXRpbmcgc3lzdGVtIHByaW1pdGl2ZXMgdG8gc3VwcG9y dCBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5LgotICoKLSAqIFN5c3RlbSBWIHNoYXJlZCBtZW1v cnkgc2VnbWVudHMgYXJlIG1hbmlwdWxhdGVkIHVzaW5nIHNobWdldCgpLCBzaG1hdCgpLAot ICogc2htZHQoKSwgYW5kIHNobWN0bCgpLiAgQXMgdGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBs aW1pdHMgZm9yIFN5c3RlbSBWCi0gKiBzaGFyZWQgbWVtb3J5IGFyZSB1c3VhbGx5IHF1aXRl IGxvdywgdGhlIFBPU0lYIGZhY2lsaXRpZXMgbWF5IGJlCi0gKiBwcmVmZXJhYmxlOyBidXQg dGhvc2UgYXJlIG5vdCBzdXBwb3J0ZWQgZXZlcnl3aGVyZS4KLSAqLwotc3RhdGljIGJvb2wK LWRzbV9pbXBsX3N5c3YoZHNtX29wIG9wLCBkc21faGFuZGxlIGhhbmRsZSwgU2l6ZSByZXF1 ZXN0X3NpemUsCi0JCQkgIGRzbV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwgdm9pZCAq Km1hcHBlZF9hZGRyZXNzLCBTaXplICptYXBwZWRfc2l6ZSwKLQkJCSAgaW50IGVsZXZlbCkK LXsKLQlrZXlfdAkJa2V5OwotCWludAkJCWlkZW50OwotCWNoYXIJICAgKmFkZHJlc3M7Ci0J Y2hhcgkJbmFtZVs2NF07Ci0JaW50CQkgICAqaWRlbnRfY2FjaGU7Ci0KLQkvKgotCSAqIFBP U0lYIHNoYXJlZCBtZW1vcnkgYW5kIG1tYXAtYmFzZWQgc2hhcmVkIG1lbW9yeSBpZGVudGlm eSBzZWdtZW50cyB3aXRoCi0JICogbmFtZXMuICBUbyBhdm9pZCBuZWVkbGVzcyBlcnJvciBt ZXNzYWdlIHZhcmlhdGlvbiwgd2UgdXNlIHRoZSBoYW5kbGUgYXMKLQkgKiB0aGUgbmFtZS4K LQkgKi8KLQlzbnByaW50ZihuYW1lLCA2NCwgIiV1IiwgaGFuZGxlKTsKLQotCS8qCi0JICog VGhlIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgbmFtZXNwYWNlIGlzIHZlcnkgcmVzdHJpY3Rl ZDsgbmFtZXMgYXJlIG9mCi0JICogdHlwZSBrZXlfdCwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8g YmUgc29tZSBzb3J0IG9mIGludGVnZXIgZGF0YSB0eXBlLCBidXQKLQkgKiBub3QgbmVjZXNz YXJpbHkgdGhlIHNhbWUgb25lIGFzIGRzbV9oYW5kbGUuICBTaW5jZSB3ZSB1c2UgZHNtX2hh bmRsZSB0bwotCSAqIGlkZW50aWZ5IHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYWNyb3NzIHBy b2Nlc3NlcywgdGhpcyBtaWdodCBzZWVtIGxpa2UKLQkgKiBhIHByb2JsZW0sIGJ1dCBpdCdz IHJlYWxseSBub3QuICBJZiBkc21faGFuZGxlIGlzIGJpZ2dlciB0aGFuIGtleV90LAotCSAq IHRoZSBjYXN0IGJlbG93IG1pZ2h0IHRydW5jYXRlIGF3YXkgc29tZSBiaXRzIGZyb20gdGhl IGhhbmRsZSB0aGUKLQkgKiB1c2VyLXByb3ZpZGVkLCBidXQgaXQnbGwgdHJ1bmNhdGUgZXhh Y3RseSB0aGUgc2FtZSBiaXRzIGF3YXkgaW4gZXhhY3RseQotCSAqIHRoZSBzYW1lIGZhc2hp b24gZXZlcnkgdGltZSB3ZSB1c2UgdGhhdCBoYW5kbGUsIHdoaWNoIGlzIGFsbCB0aGF0Ci0J ICogcmVhbGx5IG1hdHRlcnMuICBDb252ZXJzZWx5LCBpZiBkc21faGFuZGxlIGlzIHNtYWxs ZXIgdGhhbiBrZXlfdCwgd2UKLQkgKiB3b24ndCB1c2UgdGhlIGZ1bGwgcmFuZ2Ugb2YgYXZh aWxhYmxlIGtleSBzcGFjZSwgYnV0IHRoYXQncyBubyBiaWcgZGVhbAotCSAqIGVpdGhlci4K LQkgKgotCSAqIFdlIGRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBrZXkgaXNuJ3QgbmVnYXRpdmUs IGJlY2F1c2UgdGhhdCBtaWdodCBub3QgYmUKLQkgKiBwb3J0YWJsZS4KLQkgKi8KLQlrZXkg PSAoa2V5X3QpIGhhbmRsZTsKLQlpZiAoa2V5IDwgMSkJCQkJLyogYXZvaWQgY29tcGlsZXIg d2FybmluZyBpZiB0eXBlIGlzIHVuc2lnbmVkICovCi0JCWtleSA9IC1rZXk7Ci0KLQkvKgot CSAqIFRoZXJlJ3Mgb25lIHNwZWNpYWwga2V5LCBJUENfUFJJVkFURSwgd2hpY2ggY2FuJ3Qg YmUgdXNlZC4gIElmIHdlIGVuZAotCSAqIHVwIHdpdGggdGhhdCB2YWx1ZSBieSBjaGFuY2Ug ZHVyaW5nIGEgY3JlYXRlIG9wZXJhdGlvbiwganVzdCBwcmV0ZW5kIGl0Ci0JICogYWxyZWFk eSBleGlzdHMsIHNvIHRoYXQgY2FsbGVyIHdpbGwgcmV0cnkuICBJZiB3ZSBydW4gaW50byBp dCBhbnl3aGVyZQotCSAqIGVsc2UsIHRoZSBjYWxsZXIgaGFzIHBhc3NlZCBhIGhhbmRsZSB0 aGF0IGRvZXNuJ3QgY29ycmVzcG9uZCB0bwotCSAqIGFueXRoaW5nIHdlIGV2ZXIgY3JlYXRl ZCwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uCi0JICovCi0JaWYgKGtleSA9PSBJUENfUFJJ VkFURSkKLQl7Ci0JCWlmIChvcCAhPSBEU01fT1BfQ1JFQVRFKQotCQkJZWxvZyhERUJVRzQs ICJTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IGtleSBtYXkgbm90IGJlIElQQ19QUklWQVRFIik7 Ci0JCWVycm5vID0gRUVYSVNUOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoKLQkgKiBC ZWZvcmUgd2UgY2FuIGRvIGFueXRoaW5nIHdpdGggYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQs IHdlIGhhdmUgdG8gbWFwCi0JICogdGhlIHNoYXJlZCBtZW1vcnkga2V5IHRvIGEgc2hhcmVk IG1lbW9yeSBpZGVudGlmaWVyIHVzaW5nIHNobWdldCgpLiBUbwotCSAqIGF2b2lkIHJlcGVh dGVkIGxvb2t1cHMsIHdlIHN0b3JlIHRoZSBrZXkgdXNpbmcgaW1wbF9wcml2YXRlLgotCSAq LwotCWlmICgqaW1wbF9wcml2YXRlICE9IDApCi0JewotCQlpZGVudF9jYWNoZSA9IChpbnQg KikgKmltcGxfcHJpdmF0ZTsKLQkJaWRlbnQgPSAqaWRlbnRfY2FjaGU7Ci0JfQotCWVsc2UK LQl7Ci0JCWludAkJCWZsYWdzID0gSVBDUHJvdGVjdGlvbjsKLQkJc2l6ZV90CQlzZWdzaXpl OwotCi0JCS8qCi0JCSAqIEFsbG9jYXRlIHRoZSBtZW1vcnkgQkVGT1JFIGFjcXVpcmluZyB0 aGUgcmVzb3VyY2UsIHNvIHRoYXQgd2UgZG9uJ3QKLQkJICogbGVhayB0aGUgcmVzb3VyY2Ug aWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCi0JCSAqLwotCQlpZGVudF9jYWNoZSA9IE1l bW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoaW50KSk7Ci0KLQkJ LyoKLQkJICogV2hlbiB1c2luZyBzaG1nZXQgdG8gZmluZCBhbiBleGlzdGluZyBzZWdtZW50 LCB3ZSBtdXN0IHBhc3MgdGhlCi0JCSAqIHNpemUgYXMgMC4gIFBhc3NpbmcgYSBub24temVy byBzaXplIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUKLQkJICogYWN0dWFsIHNpemUgd2ls bCByZXN1bHQgaW4gRUlOVkFMLgotCQkgKi8KLQkJc2Vnc2l6ZSA9IDA7Ci0KLQkJaWYgKG9w ID09IERTTV9PUF9DUkVBVEUpCi0JCXsKLQkJCWZsYWdzIHw9IElQQ19DUkVBVCB8IElQQ19F WENMOwotCQkJc2Vnc2l6ZSA9IHJlcXVlc3Rfc2l6ZTsKLQkJfQotCi0JCWlmICgoaWRlbnQg PSBzaG1nZXQoa2V5LCBzZWdzaXplLCBmbGFncykpID09IC0xKQotCQl7Ci0JCQlpZiAob3Ag PT0gRFNNX09QX0FUVEFDSCB8fCBlcnJubyAhPSBFRVhJU1QpCi0JCQl7Ci0JCQkJaW50CQkJ c2F2ZV9lcnJubyA9IGVycm5vOwotCi0JCQkJcGZyZWUoaWRlbnRfY2FjaGUpOwotCQkJCWVy cm5vID0gc2F2ZV9lcnJubzsKLQkJCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkJCShlcnJjb2Rl X2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKLQkJCQkJCSBlcnJtc2coImNvdWxkIG5v dCBnZXQgc2hhcmVkIG1lbW9yeSBzZWdtZW50OiAlbSIpKSk7Ci0JCQl9Ci0JCQlyZXR1cm4g ZmFsc2U7Ci0JCX0KLQotCQkqaWRlbnRfY2FjaGUgPSBpZGVudDsKLQkJKmltcGxfcHJpdmF0 ZSA9ICh1aW50cHRyX3QpIGlkZW50X2NhY2hlOwotCX0KLQotCS8qIEhhbmRsZSB0ZWFyZG93 biBjYXNlcy4gKi8KLQlpZiAob3AgPT0gRFNNX09QX0RFVEFDSCB8fCBvcCA9PSBEU01fT1Bf REVTVFJPWSkKLQl7Ci0JCXBmcmVlKGlkZW50X2NhY2hlKTsKLQkJKmltcGxfcHJpdmF0ZSA9 IDA7Ci0JCWlmICgqbWFwcGVkX2FkZHJlc3MgIT0gTlVMTCAmJiBzaG1kdCgqbWFwcGVkX2Fk ZHJlc3MpICE9IDApCi0JCXsKLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQkoZXJyY29kZV9m b3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCB1 bm1hcCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCi0JCQkJCQkJbmFtZSkp KTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkqbWFwcGVkX2FkZHJlc3MgPSBOVUxMOwot CQkqbWFwcGVkX3NpemUgPSAwOwotCQlpZiAob3AgPT0gRFNNX09QX0RFU1RST1kgJiYgc2ht Y3RsKGlkZW50LCBJUENfUk1JRCwgTlVMTCkgPCAwKQotCQl7Ci0JCQllcmVwb3J0KGVsZXZl bCwKLQkJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAotCQkJCQkg ZXJybXNnKCJjb3VsZCBub3QgcmVtb3ZlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6 ICVtIiwKLQkJCQkJCQluYW1lKSkpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVy biB0cnVlOwotCX0KLQotCS8qIElmIHdlJ3JlIGF0dGFjaGluZyBpdCwgd2UgbXVzdCB1c2Ug SVBDX1NUQVQgdG8gZGV0ZXJtaW5lIHRoZSBzaXplLiAqLwotCWlmIChvcCA9PSBEU01fT1Bf QVRUQUNIKQotCXsKLQkJc3RydWN0IHNobWlkX2RzIHNobTsKLQotCQlpZiAoc2htY3RsKGlk ZW50LCBJUENfU1RBVCwgJnNobSkgIT0gMCkKLQkJewotCQkJZXJlcG9ydChlbGV2ZWwsCi0J CQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKLQkJCQkJIGVycm1z ZygiY291bGQgbm90IHN0YXQgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAot CQkJCQkJCW5hbWUpKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmVxdWVzdF9zaXpl ID0gc2htLnNobV9zZWdzejsKLQl9Ci0KLQkvKiBNYXAgaXQuICovCi0JYWRkcmVzcyA9IHNo bWF0KGlkZW50LCBOVUxMLCBQR19TSE1BVF9GTEFHUyk7Ci0JaWYgKGFkZHJlc3MgPT0gKHZv aWQgKikgLTEpCi0JewotCQlpbnQJCQlzYXZlX2Vycm5vOwotCi0JCS8qIEJhY2sgb3V0IHdo YXQncyBhbHJlYWR5IGJlZW4gZG9uZS4gKi8KLQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCQlp ZiAob3AgPT0gRFNNX09QX0NSRUFURSkKLQkJCXNobWN0bChpZGVudCwgSVBDX1JNSUQsIE5V TEwpOwotCQllcnJubyA9IHNhdmVfZXJybm87Ci0KLQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJ KGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAotCQkJCSBlcnJtc2coImNv dWxkIG5vdCBtYXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAotCQkJCQkJ bmFtZSkpKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkqbWFwcGVkX2FkZHJlc3MgPSBhZGRy ZXNzOwotCSptYXBwZWRfc2l6ZSA9IHJlcXVlc3Rfc2l6ZTsKLQotCXJldHVybiB0cnVlOwot fQotI2VuZGlmCi0KLSNpZmRlZiBVU0VfRFNNX1dJTkRPV1MKLS8qCi0gKiBPcGVyYXRpbmcg c3lzdGVtIHByaW1pdGl2ZXMgdG8gc3VwcG9ydCBXaW5kb3dzIHNoYXJlZCBtZW1vcnkuCi0g KgotICogV2luZG93cyBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uIGlzIGRvbmUgdXNp bmcgZmlsZSBtYXBwaW5nCi0gKiB3aGljaCBjYW4gYmUgYmFja2VkIGJ5IGVpdGhlciBwaHlz aWNhbCBmaWxlIG9yIHN5c3RlbSBwYWdpbmcgZmlsZS4KLSAqIEN1cnJlbnQgaW1wbGVtZW50 YXRpb24gdXNlcyBzeXN0ZW0gcGFnaW5nIGZpbGUgYXMgb3RoZXIgZWZmZWN0cwotICogbGlr ZSBwZXJmb3JtYW5jZSBhcmUgbm90IGNsZWFyIGZvciBwaHlzaWNhbCBmaWxlIGFuZCBpdCBp cyB1c2VkIGluIHNpbWlsYXIKLSAqIHdheSBmb3IgbWFpbiBzaGFyZWQgbWVtb3J5IGluIHdp bmRvd3MuCi0gKgotICogQSBtZW1vcnkgbWFwcGluZyBvYmplY3QgaXMgYSBrZXJuZWwgb2Jq ZWN0IC0gdGhleSBhbHdheXMgZ2V0IGRlbGV0ZWQgd2hlbgotICogdGhlIGxhc3QgcmVmZXJl bmNlIHRvIHRoZW0gZ29lcyBhd2F5LCBlaXRoZXIgZXhwbGljaXRseSB2aWEgYSBDbG9zZUhh bmRsZSBvcgotICogd2hlbiB0aGUgcHJvY2VzcyBjb250YWluaW5nIHRoZSByZWZlcmVuY2Ug ZXhpdHMuCi0gKi8KLXN0YXRpYyBib29sCi1kc21faW1wbF93aW5kb3dzKGRzbV9vcCBvcCwg ZHNtX2hhbmRsZSBoYW5kbGUsIFNpemUgcmVxdWVzdF9zaXplLAotCQkJCSBkc21faW1wbF9w cml2YXRlICppbXBsX3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywKLQkJCQkgU2l6 ZSAqbWFwcGVkX3NpemUsIGludCBlbGV2ZWwpCi17Ci0JY2hhcgkgICAqYWRkcmVzczsKLQlI QU5ETEUJCWhtYXA7Ci0JY2hhcgkJbmFtZVs2NF07Ci0JTUVNT1JZX0JBU0lDX0lORk9STUFU SU9OIGluZm87Ci0KLQkvKgotCSAqIFN0b3JpbmcgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVu dCBpbiB0aGUgR2xvYmFsXCBuYW1lc3BhY2UsIGNhbiBhbGxvdwotCSAqIGFueSBwcm9jZXNz IHJ1bm5pbmcgaW4gYW55IHNlc3Npb24gdG8gYWNjZXNzIHRoYXQgZmlsZSBtYXBwaW5nIG9i amVjdAotCSAqIHByb3ZpZGVkIHRoYXQgdGhlIGNhbGxlciBoYXMgdGhlIHJlcXVpcmVkIGFj Y2VzcyByaWdodHMuIEJ1dCB0byBhdm9pZAotCSAqIGlzc3VlcyBmYWNlZCBpbiBtYWluIHNo YXJlZCBtZW1vcnksIHdlIGFyZSB1c2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24KLQkgKiBz aW1pbGFyIHRvIG1haW4gc2hhcmVkIG1lbW9yeS4gV2UgY2FuIGNoYW5nZSBoZXJlIG9uY2Ug aXNzdWUgbWVudGlvbmVkCi0JICogaW4gR2V0U2hhcmVkTWVtTmFtZSBpcyByZXNvbHZlZC4K LQkgKi8KLQlzbnByaW50ZihuYW1lLCA2NCwgIiVzLiV1IiwgU0VHTUVOVF9OQU1FX1BSRUZJ WCwgaGFuZGxlKTsKLQotCS8qCi0JICogSGFuZGxlIHRlYXJkb3duIGNhc2VzLiAgU2luY2Ug V2luZG93cyBhdXRvbWF0aWNhbGx5IGRlc3Ryb3lzIHRoZSBvYmplY3QKLQkgKiB3aGVuIG5v IHJlZmVyZW5jZXMgcmVtYWluLCB3ZSBjYW4gdHJlYXQgaXQgdGhlIHNhbWUgYXMgZGV0YWNo LgotCSAqLwotCWlmIChvcCA9PSBEU01fT1BfREVUQUNIIHx8IG9wID09IERTTV9PUF9ERVNU Uk9ZKQotCXsKLQkJaWYgKCptYXBwZWRfYWRkcmVzcyAhPSBOVUxMCi0JCQkmJiBVbm1hcFZp ZXdPZkZpbGUoKm1hcHBlZF9hZGRyZXNzKSA9PSAwKQotCQl7Ci0JCQlfZG9zbWFwZXJyKEdl dExhc3RFcnJvcigpKTsKLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQkoZXJyY29kZV9mb3Jf ZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCB1bm1h cCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCi0JCQkJCQkJbmFtZSkpKTsK LQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlpZiAoKmltcGxfcHJpdmF0ZSAhPSBOVUxMCi0J CQkmJiBDbG9zZUhhbmRsZSgqaW1wbF9wcml2YXRlKSA9PSAwKQotCQl7Ci0JCQlfZG9zbWFw ZXJyKEdldExhc3RFcnJvcigpKTsKLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQkoZXJyY29k ZV9mb3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5v dCByZW1vdmUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAotCQkJCQkJCW5h bWUpKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQkqaW1wbF9wcml2YXRlID0gTlVM TDsKLQkJKm1hcHBlZF9hZGRyZXNzID0gTlVMTDsKLQkJKm1hcHBlZF9zaXplID0gMDsKLQkJ cmV0dXJuIHRydWU7Ci0JfQotCi0JLyogQ3JlYXRlIG5ldyBzZWdtZW50IG9yIG9wZW4gYW4g ZXhpc3Rpbmcgb25lIGZvciBhdHRhY2guICovCi0JaWYgKG9wID09IERTTV9PUF9DUkVBVEUp Ci0JewotCQlEV09SRAkJc2l6ZV9oaWdoOwotCQlEV09SRAkJc2l6ZV9sb3c7Ci0JCURXT1JE CQllcnJjb2RlOwotCi0JCS8qIFNoaWZ0cyA+PSB0aGUgd2lkdGggb2YgdGhlIHR5cGUgYXJl IHVuZGVmaW5lZC4gKi8KLSNpZmRlZiBfV0lONjQKLQkJc2l6ZV9oaWdoID0gcmVxdWVzdF9z aXplID4+IDMyOwotI2Vsc2UKLQkJc2l6ZV9oaWdoID0gMDsKLSNlbmRpZgotCQlzaXplX2xv dyA9IChEV09SRCkgcmVxdWVzdF9zaXplOwotCi0JCS8qIENyZWF0ZUZpbGVNYXBwaW5nIG1p Z2h0IG5vdCBjbGVhciB0aGUgZXJyb3IgY29kZSBvbiBzdWNjZXNzICovCi0JCVNldExhc3RF cnJvcigwKTsKLQotCQlobWFwID0gQ3JlYXRlRmlsZU1hcHBpbmcoSU5WQUxJRF9IQU5ETEVf VkFMVUUsCS8qIFVzZSB0aGUgcGFnZWZpbGUgKi8KLQkJCQkJCQkJIE5VTEwsCS8qIERlZmF1 bHQgc2VjdXJpdHkgYXR0cnMgKi8KLQkJCQkJCQkJIFBBR0VfUkVBRFdSSVRFLAkvKiBNZW1v cnkgaXMgcmVhZC93cml0ZSAqLwotCQkJCQkJCQkgc2l6ZV9oaWdoLCAvKiBVcHBlciAzMiBi aXRzIG9mIHNpemUgKi8KLQkJCQkJCQkJIHNpemVfbG93LAkvKiBMb3dlciAzMiBiaXRzIG9m IHNpemUgKi8KLQkJCQkJCQkJIG5hbWUpOwotCi0JCWVycmNvZGUgPSBHZXRMYXN0RXJyb3Io KTsKLQkJaWYgKGVycmNvZGUgPT0gRVJST1JfQUxSRUFEWV9FWElTVFMgfHwgZXJyY29kZSA9 PSBFUlJPUl9BQ0NFU1NfREVOSUVEKQotCQl7Ci0JCQkvKgotCQkJICogT24gV2luZG93cywg d2hlbiB0aGUgc2VnbWVudCBhbHJlYWR5IGV4aXN0cywgYSBoYW5kbGUgZm9yIHRoZQotCQkJ ICogZXhpc3Rpbmcgc2VnbWVudCBpcyByZXR1cm5lZC4gIFdlIG11c3QgY2xvc2UgaXQgYmVm b3JlCi0JCQkgKiByZXR1cm5pbmcuICBIb3dldmVyLCBpZiB0aGUgZXhpc3Rpbmcgc2VnbWVu dCBpcyBjcmVhdGVkIGJ5IGEKLQkJCSAqIHNlcnZpY2UsIHRoZW4gaXQgcmV0dXJucyBFUlJP Ul9BQ0NFU1NfREVOSUVELiBXZSBkb24ndCBkbwotCQkJICogX2Rvc21hcGVyciBoZXJlLCBz byBlcnJubyB3b24ndCBiZSBtb2RpZmllZC4KLQkJCSAqLwotCQkJaWYgKGhtYXApCi0JCQkJ Q2xvc2VIYW5kbGUoaG1hcCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoIWht YXApCi0JCXsKLQkJCV9kb3NtYXBlcnIoZXJyY29kZSk7Ci0JCQllcmVwb3J0KGVsZXZlbCwK LQkJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAotCQkJCQkgZXJy bXNnKCJjb3VsZCBub3QgY3JlYXRlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVt IiwKLQkJCQkJCQluYW1lKSkpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCWVsc2UK LQl7Ci0JCWhtYXAgPSBPcGVuRmlsZU1hcHBpbmcoRklMRV9NQVBfV1JJVEUgfCBGSUxFX01B UF9SRUFELAotCQkJCQkJCSAgIEZBTFNFLAkvKiBkbyBub3QgaW5oZXJpdCB0aGUgbmFtZSAq LwotCQkJCQkJCSAgIG5hbWUpOwkvKiBuYW1lIG9mIG1hcHBpbmcgb2JqZWN0ICovCi0JCWlm ICghaG1hcCkKLQkJewotCQkJX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7Ci0JCQllcmVw b3J0KGVsZXZlbCwKLQkJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgp LAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQg XCIlc1wiOiAlbSIsCi0JCQkJCQkJbmFtZSkpKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQot CX0KLQotCS8qIE1hcCBpdC4gKi8KLQlhZGRyZXNzID0gTWFwVmlld09mRmlsZShobWFwLCBG SUxFX01BUF9XUklURSB8IEZJTEVfTUFQX1JFQUQsCi0JCQkJCQkJMCwgMCwgMCk7Ci0JaWYg KCFhZGRyZXNzKQotCXsKLQkJaW50CQkJc2F2ZV9lcnJubzsKLQotCQlfZG9zbWFwZXJyKEdl dExhc3RFcnJvcigpKTsKLQkJLyogQmFjayBvdXQgd2hhdCdzIGFscmVhZHkgYmVlbiBkb25l LiAqLwotCQlzYXZlX2Vycm5vID0gZXJybm87Ci0JCUNsb3NlSGFuZGxlKGhtYXApOwotCQll cnJubyA9IHNhdmVfZXJybm87Ci0KLQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJKGVycmNvZGVf Zm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAotCQkJCSBlcnJtc2coImNvdWxkIG5vdCBt YXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAotCQkJCQkJbmFtZSkpKTsK LQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qCi0JICogVmlydHVhbFF1ZXJ5IGdpdmVzIHNp emUgaW4gcGFnZV9zaXplIHVuaXRzLCB3aGljaCBpcyA0SyBmb3IgV2luZG93cy4gV2UKLQkg KiBuZWVkIHNpemUgb25seSB3aGVuIHdlIGFyZSBhdHRhY2hpbmcsIGJ1dCBpdCdzIGJldHRl ciB0byBnZXQgdGhlIHNpemUKLQkgKiB3aGVuIGNyZWF0aW5nIG5ldyBzZWdtZW50IHRvIGtl ZXAgc2l6ZSBjb25zaXN0ZW50IGJvdGggZm9yCi0JICogRFNNX09QX0NSRUFURSBhbmQgRFNN X09QX0FUVEFDSC4KLQkgKi8KLQlpZiAoVmlydHVhbFF1ZXJ5KGFkZHJlc3MsICZpbmZvLCBz aXplb2YoaW5mbykpID09IDApCi0JewotCQlpbnQJCQlzYXZlX2Vycm5vOwotCi0JCV9kb3Nt YXBlcnIoR2V0TGFzdEVycm9yKCkpOwotCQkvKiBCYWNrIG91dCB3aGF0J3MgYWxyZWFkeSBi ZWVuIGRvbmUuICovCi0JCXNhdmVfZXJybm8gPSBlcnJubzsKLQkJVW5tYXBWaWV3T2ZGaWxl KGFkZHJlc3MpOwotCQlDbG9zZUhhbmRsZShobWFwKTsKLQkJZXJybm8gPSBzYXZlX2Vycm5v OwotCi0JCWVyZXBvcnQoZWxldmVsLAotCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJl ZF9tZW1vcnkoKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc3RhdCBzaGFyZWQgbWVtb3J5 IHNlZ21lbnQgXCIlc1wiOiAlbSIsCi0JCQkJCQluYW1lKSkpOwotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCi0JKm1hcHBlZF9hZGRyZXNzID0gYWRkcmVzczsKLQkqbWFwcGVkX3NpemUgPSBp bmZvLlJlZ2lvblNpemU7Ci0JKmltcGxfcHJpdmF0ZSA9IGhtYXA7Ci0KLQlyZXR1cm4gdHJ1 ZTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgVVNFX0RTTV9NTUFQCi0vKgotICogT3BlcmF0aW5n IHN5c3RlbSBwcmltaXRpdmVzIHRvIHN1cHBvcnQgbW1hcC1iYXNlZCBzaGFyZWQgbWVtb3J5 LgotICoKLSAqIENhbGxpbmcgdGhpcyAic2hhcmVkIG1lbW9yeSIgaXMgc29tZXdoYXQgb2Yg YSBtaXNub21lciwgYmVjYXVzZSB3aGF0Ci0gKiB3ZSdyZSByZWFsbHkgZG9pbmcgaXMgY3Jl YXRpbmcgYSBidW5jaCBvZiBmaWxlcyBhbmQgbWFwcGluZyB0aGVtIGludG8KLSAqIG91ciBh ZGRyZXNzIHNwYWNlLiAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gbWF5IGZlZWwgb2JsaWdlZCB0 bwotICogc3luY2hyb25pemUgdGhlIGNvbnRlbnRzIHRvIGRpc2sgZXZlbiBpZiBub3RoaW5n IGlzIGJlaW5nIHBhZ2VkIG91dCwKLSAqIHdoaWNoIHdpbGwgbm90IHNlcnZlIHVzIHdlbGwu ICBUaGUgdXNlciBjYW4gcmVsb2NhdGUgdGhlIHBnX2R5bnNobWVtCi0gKiBkaXJlY3Rvcnkg dG8gYSByYW1kaXNrIHRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgaWYgYXZhaWxhYmxlLgotICov Ci1zdGF0aWMgYm9vbAotZHNtX2ltcGxfbW1hcChkc21fb3Agb3AsIGRzbV9oYW5kbGUgaGFu ZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKLQkJCSAgZHNtX2ltcGxfcHJpdmF0ZSAqaW1wbF9w cml2YXRlLCB2b2lkICoqbWFwcGVkX2FkZHJlc3MsIFNpemUgKm1hcHBlZF9zaXplLAotCQkJ ICBpbnQgZWxldmVsKQotewotCWNoYXIJCW5hbWVbNjRdOwotCWludAkJCWZsYWdzOwotCWlu dAkJCWZkOwotCWNoYXIJICAgKmFkZHJlc3M7Ci0KLQlzbnByaW50ZihuYW1lLCA2NCwgUEdf RFlOU0hNRU1fRElSICIvIiBQR19EWU5TSE1FTV9NTUFQX0ZJTEVfUFJFRklYICIldSIsCi0J CQkgaGFuZGxlKTsKLQotCS8qIEhhbmRsZSB0ZWFyZG93biBjYXNlcy4gKi8KLQlpZiAob3Ag PT0gRFNNX09QX0RFVEFDSCB8fCBvcCA9PSBEU01fT1BfREVTVFJPWSkKLQl7Ci0JCWlmICgq bWFwcGVkX2FkZHJlc3MgIT0gTlVMTAotCQkJJiYgbXVubWFwKCptYXBwZWRfYWRkcmVzcywg Km1hcHBlZF9zaXplKSAhPSAwKQotCQl7Ci0JCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkJKGVy cmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAotCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgdW5tYXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAotCQkJCQkJ CW5hbWUpKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJKm1hcHBlZF9hZGRyZXNzID0g TlVMTDsKLQkJKm1hcHBlZF9zaXplID0gMDsKLQkJaWYgKG9wID09IERTTV9PUF9ERVNUUk9Z ICYmIHVubGluayhuYW1lKSAhPSAwKQotCQl7Ci0JCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkJ KGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAotCQkJCQkgZXJybXNnKCJj b3VsZCBub3QgcmVtb3ZlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKLQkJ CQkJCQluYW1lKSkpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiB0cnVlOwot CX0KLQotCS8qIENyZWF0ZSBuZXcgc2VnbWVudCBvciBvcGVuIGFuIGV4aXN0aW5nIG9uZSBm b3IgYXR0YWNoLiAqLwotCWZsYWdzID0gT19SRFdSIHwgKG9wID09IERTTV9PUF9DUkVBVEUg PyBPX0NSRUFUIHwgT19FWENMIDogMCk7Ci0JaWYgKChmZCA9IE9wZW5UcmFuc2llbnRGaWxl KG5hbWUsIGZsYWdzKSkgPT0gLTEpCi0JewotCQlpZiAob3AgPT0gRFNNX09QX0FUVEFDSCB8 fCBlcnJubyAhPSBFRVhJU1QpCi0JCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkJKGVycmNvZGVf Zm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qg b3BlbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCi0JCQkJCQkJbmFtZSkp KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qCi0JICogSWYgd2UncmUgYXR0YWNoaW5n IHRoZSBzZWdtZW50LCBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc2l6ZTsgaWYgd2UgYXJlCi0J ICogY3JlYXRpbmcgdGhlIHNlZ21lbnQsIHNldCB0aGUgc2l6ZSB0byB0aGUgcmVxdWVzdGVk IHZhbHVlLgotCSAqLwotCWlmIChvcCA9PSBEU01fT1BfQVRUQUNIKQotCXsKLQkJc3RydWN0 IHN0YXQgc3Q7Ci0KLQkJaWYgKGZzdGF0KGZkLCAmc3QpICE9IDApCi0JCXsKLQkJCWludAkJ CXNhdmVfZXJybm87Ci0KLQkJCS8qIEJhY2sgb3V0IHdoYXQncyBhbHJlYWR5IGJlZW4gZG9u ZS4gKi8KLQkJCXNhdmVfZXJybm8gPSBlcnJubzsKLQkJCUNsb3NlVHJhbnNpZW50RmlsZShm ZCk7Ci0JCQllcnJubyA9IHNhdmVfZXJybm87Ci0KLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJ CQkoZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCi0JCQkJCSBlcnJtc2co ImNvdWxkIG5vdCBzdGF0IHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKLQkJ CQkJCQluYW1lKSkpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJlcXVlc3Rfc2l6ZSA9 IHN0LnN0X3NpemU7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIEFsbG9jYXRlIGEgYnVm ZmVyIGZ1bGwgb2YgemVyb3MuCi0JCSAqCi0JCSAqIE5vdGU6IHBhbGxvYyB6YnVmZmVyLCBp bnN0ZWFkIG9mIGp1c3QgdXNpbmcgYSBsb2NhbCBjaGFyIGFycmF5LCB0bwotCQkgKiBlbnN1 cmUgaXQgaXMgcmVhc29uYWJseSB3ZWxsLWFsaWduZWQ7IHRoaXMgbWF5IHNhdmUgYSBmZXcg Y3ljbGVzCi0JCSAqIHRyYW5zZmVycmluZyBkYXRhIHRvIHRoZSBrZXJuZWwuCi0JCSAqLwot CQljaGFyCSAgICp6YnVmZmVyID0gKGNoYXIgKikgcGFsbG9jMChaQlVGRkVSX1NJWkUpOwot CQlTaXplCQlyZW1haW5pbmcgPSByZXF1ZXN0X3NpemU7Ci0JCWJvb2wJCXN1Y2Nlc3MgPSB0 cnVlOwotCi0JCS8qCi0JCSAqIFplcm8tZmlsbCB0aGUgZmlsZS4gV2UgaGF2ZSB0byBkbyB0 aGlzIHRoZSBoYXJkIHdheSB0byBlbnN1cmUgdGhhdAotCQkgKiBhbGwgdGhlIGZpbGUgc3Bh Y2UgaGFzIHJlYWxseSBiZWVuIGFsbG9jYXRlZCwgc28gdGhhdCB3ZSBkb24ndAotCQkgKiBs YXRlciBzZWcgZmF1bHQgd2hlbiBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBtYXBwaW5nLiAgVGhp cyBpcyBwcmV0dHkKLQkJICogcGVzc2ltYWwuCi0JCSAqLwotCQl3aGlsZSAoc3VjY2VzcyAm JiByZW1haW5pbmcgPiAwKQotCQl7Ci0JCQlTaXplCQlnb2FsID0gcmVtYWluaW5nOwotCi0J CQlpZiAoZ29hbCA+IFpCVUZGRVJfU0laRSkKLQkJCQlnb2FsID0gWkJVRkZFUl9TSVpFOwot CQkJcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZFTlRfRFNNX0ZJTExfWkVST19X UklURSk7Ci0JCQlpZiAod3JpdGUoZmQsIHpidWZmZXIsIGdvYWwpID09IGdvYWwpCi0JCQkJ cmVtYWluaW5nIC09IGdvYWw7Ci0JCQllbHNlCi0JCQkJc3VjY2VzcyA9IGZhbHNlOwotCQkJ cGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwotCQl9Ci0KLQkJaWYgKCFzdWNjZXNzKQotCQl7 Ci0JCQlpbnQJCQlzYXZlX2Vycm5vOwotCi0JCQkvKiBCYWNrIG91dCB3aGF0J3MgYWxyZWFk eSBiZWVuIGRvbmUuICovCi0JCQlzYXZlX2Vycm5vID0gZXJybm87Ci0JCQlDbG9zZVRyYW5z aWVudEZpbGUoZmQpOwotCQkJdW5saW5rKG5hbWUpOwotCQkJZXJybm8gPSBzYXZlX2Vycm5v ID8gc2F2ZV9lcnJubyA6IEVOT1NQQzsKLQotCQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJCShl cnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKLQkJCQkJIGVycm1zZygiY291 bGQgbm90IHJlc2l6ZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiIHRvICV6dSBieXRl czogJW0iLAotCQkJCQkJCW5hbWUsIHJlcXVlc3Rfc2l6ZSkpKTsKLQkJCXJldHVybiBmYWxz ZTsKLQkJfQotCX0KLQotCS8qIE1hcCBpdC4gKi8KLQlhZGRyZXNzID0gbW1hcChOVUxMLCBy ZXF1ZXN0X3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCQkJICAgTUFQX1NIQVJF RCB8IE1BUF9IQVNTRU1BUEhPUkUgfCBNQVBfTk9TWU5DLCBmZCwgMCk7Ci0JaWYgKGFkZHJl c3MgPT0gTUFQX0ZBSUxFRCkKLQl7Ci0JCWludAkJCXNhdmVfZXJybm87Ci0KLQkJLyogQmFj ayBvdXQgd2hhdCdzIGFscmVhZHkgYmVlbiBkb25lLiAqLwotCQlzYXZlX2Vycm5vID0gZXJy bm87Ci0JCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7Ci0JCWlmIChvcCA9PSBEU01fT1BfQ1JF QVRFKQotCQkJdW5saW5rKG5hbWUpOwotCQllcnJubyA9IHNhdmVfZXJybm87Ci0KLQkJZXJl cG9ydChlbGV2ZWwsCi0JCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgp LAotCQkJCSBlcnJtc2coImNvdWxkIG5vdCBtYXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwi JXNcIjogJW0iLAotCQkJCQkJbmFtZSkpKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkqbWFw cGVkX2FkZHJlc3MgPSBhZGRyZXNzOwotCSptYXBwZWRfc2l6ZSA9IHJlcXVlc3Rfc2l6ZTsK LQotCWlmIChDbG9zZVRyYW5zaWVudEZpbGUoZmQpICE9IDApCi0JewotCQllcmVwb3J0KGVs ZXZlbCwKLQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkgZXJybXNnKCJj b3VsZCBub3QgY2xvc2Ugc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAotCQkJ CQkJbmFtZSkpKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQot I2VuZGlmCi0KLS8qCi0gKiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBhY3Rpb25zIHRoYXQg bXVzdCBiZSBwZXJmb3JtZWQgd2hlbiBhIHNlZ21lbnQgaXMgdG8KLSAqIGJlIHByZXNlcnZl ZCBldmVuIHdoZW4gbm8gYmFja2VuZCBoYXMgaXQgYXR0YWNoZWQuCi0gKgotICogRXhjZXB0 IG9uIFdpbmRvd3MsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLiAgQnV0 IHNpbmNlIFdpbmRvd3MKLSAqIGNsZWFucyB1cCBzZWdtZW50cyBhdXRvbWF0aWNhbGx5IHdo ZW4gbm8gcmVmZXJlbmNlcyByZW1haW4sIHdlIGR1cGxpY2F0ZQotICogdGhlIHNlZ21lbnQg aGFuZGxlIGludG8gdGhlIHBvc3RtYXN0ZXIgcHJvY2Vzcy4gIFRoZSBwb3N0bWFzdGVyIG5l ZWRuJ3QKLSAqIGRvIGFueXRoaW5nIHRvIHJlY2VpdmUgdGhlIGhhbmRsZTsgV2luZG93cyB0 cmFuc2ZlcnMgaXQgYXV0b21hdGljYWxseS4KKyAqIE5vLW9wIGltcGxlbWVudGF0aW9uIG9m IHRoZSBwaW5fc2VnbWVudCBpbnRlcmZhY2UuICBNb3N0IGltcGxlbWVudGF0aW9ucworICog KGFsbCBidXQgV2luZG93cykgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLgogICov CiB2b2lkCi1kc21faW1wbF9waW5fc2VnbWVudChkc21faGFuZGxlIGhhbmRsZSwgZHNtX2lt cGxfcHJpdmF0ZSBpbXBsX3ByaXZhdGUsCi0JCQkJCSBkc21faW1wbF9wcml2YXRlX3BtX2hh bmRsZSAqcG1faGFuZGxlKQorZHNtX2ltcGxfbm9vcF9waW5fc2VnbWVudChkc21faW1wbF9o YW5kbGUgaGFuZGxlLCBkc21faW1wbF9wcml2YXRlIGltcGxfcHJpdmF0ZSwKKwkJCQkJCSAg ZHNtX2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgKnBtX2hhbmRsZSkKIHsKLQlzd2l0Y2ggKGR5 bmFtaWNfc2hhcmVkX21lbW9yeV90eXBlKQotCXsKLSNpZmRlZiBVU0VfRFNNX1dJTkRPV1MK LQkJY2FzZSBEU01fSU1QTF9XSU5ET1dTOgotCQkJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQot CQkJewotCQkJCUhBTkRMRQkJaG1hcDsKLQotCQkJCWlmICghRHVwbGljYXRlSGFuZGxlKEdl dEN1cnJlbnRQcm9jZXNzKCksIGltcGxfcHJpdmF0ZSwKLQkJCQkJCQkJCSBQb3N0bWFzdGVy SGFuZGxlLCAmaG1hcCwgMCwgRkFMU0UsCi0JCQkJCQkJCQkgRFVQTElDQVRFX1NBTUVfQUND RVNTKSkKLQkJCQl7Ci0JCQkJCWNoYXIJCW5hbWVbNjRdOwotCi0JCQkJCXNucHJpbnRmKG5h bWUsIDY0LCAiJXMuJXUiLCBTRUdNRU5UX05BTUVfUFJFRklYLCBoYW5kbGUpOwotCQkJCQlf ZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKLQkJCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJ CQkoZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCi0JCQkJCQkJIGVycm1z ZygiY291bGQgbm90IGR1cGxpY2F0ZSBoYW5kbGUgZm9yIFwiJXNcIjogJW0iLAotCQkJCQkJ CQkJbmFtZSkpKTsKLQkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIEhlcmUsIHdlIHJlbWVtYmVy IHRoZSBoYW5kbGUgdGhhdCB3ZSBjcmVhdGVkIGluIHRoZQotCQkJCSAqIHBvc3RtYXN0ZXIg cHJvY2Vzcy4gIFRoaXMgaGFuZGxlIGlzbid0IGFjdHVhbGx5IHVzYWJsZSBpbgotCQkJCSAq IGFueSBwcm9jZXNzIG90aGVyIHRoYW4gdGhlIHBvc3RtYXN0ZXIsIGJ1dCB0aGF0IGRvZXNu J3QKLQkJCQkgKiBtYXR0ZXIuICBXZSdyZSBqdXN0IGhvbGRpbmcgb250byBpdCBzbyB0aGF0 LCBpZiB0aGUgc2VnbWVudAotCQkJCSAqIGlzIHVucGlubmVkLCBkc21faW1wbF91bnBpbl9z ZWdtZW50IGNhbiBjbG9zZSBpdC4KLQkJCQkgKi8KLQkJCQkqcG1faGFuZGxlID0gaG1hcDsK LQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQl9CiB9 CiAKLS8qCi0gKiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBhY3Rpb25zIHRoYXQgbXVzdCBi ZSBwZXJmb3JtZWQgd2hlbiBhIHNlZ21lbnQgaXMgbm8KLSAqIGxvbmdlciB0byBiZSBwcmVz ZXJ2ZWQsIHNvIHRoYXQgaXQgd2lsbCBiZSBjbGVhbmVkIHVwIHdoZW4gYWxsIGJhY2tlbmRz Ci0gKiBoYXZlIGRldGFjaGVkIGZyb20gaXQuCi0gKgotICogRXhjZXB0IG9uIFdpbmRvd3Ms IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLiAgRm9yIFdpbmRvd3MsIHdl Ci0gKiBjbG9zZSB0aGUgZXh0cmEgaGFuZGxlIHRoYXQgZHNtX2ltcGxfcGluX3NlZ21lbnQg Y3JlYXRlZCBpbiB0aGUKLSAqIHBvc3RtYXN0ZXIncyBwcm9jZXNzIHNwYWNlLgotICovCisv KiBuby1vcCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdW5waW5fc2VnbWVudCBpbnRlcmZhY2Ug Ki8KIHZvaWQKLWRzbV9pbXBsX3VucGluX3NlZ21lbnQoZHNtX2hhbmRsZSBoYW5kbGUsIGRz bV9pbXBsX3ByaXZhdGVfcG1faGFuZGxlICpwbV9oYW5kbGUpCi17Ci0Jc3dpdGNoIChkeW5h bWljX3NoYXJlZF9tZW1vcnlfdHlwZSkKLQl7Ci0jaWZkZWYgVVNFX0RTTV9XSU5ET1dTCi0J CWNhc2UgRFNNX0lNUExfV0lORE9XUzoKLQkJCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKLQkJ CXsKLQkJCQlpZiAoKmltcGxfcHJpdmF0ZSAmJgotCQkJCQkhRHVwbGljYXRlSGFuZGxlKFBv c3RtYXN0ZXJIYW5kbGUsICppbXBsX3ByaXZhdGUsCi0JCQkJCQkJCQkgTlVMTCwgTlVMTCwg MCwgRkFMU0UsCi0JCQkJCQkJCQkgRFVQTElDQVRFX0NMT1NFX1NPVVJDRSkpCi0JCQkJewot CQkJCQljaGFyCQluYW1lWzY0XTsKLQotCQkJCQlzbnByaW50ZihuYW1lLCA2NCwgIiVzLiV1 IiwgU0VHTUVOVF9OQU1FX1BSRUZJWCwgaGFuZGxlKTsKLQkJCQkJX2Rvc21hcGVycihHZXRM YXN0RXJyb3IoKSk7Ci0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGVfZm9y X2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAotCQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBk dXBsaWNhdGUgaGFuZGxlIGZvciBcIiVzXCI6ICVtIiwKLQkJCQkJCQkJCW5hbWUpKSk7Ci0J CQkJfQotCi0JCQkJKnBtX2hhbmRsZSA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKLSNlbmRpZgot CQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1lcnJjb2RlX2Zv cl9keW5hbWljX3NoYXJlZF9tZW1vcnkodm9pZCkKK2RzbV9pbXBsX25vb3BfdW5waW5fc2Vn bWVudChkc21faW1wbF9oYW5kbGUgaGFuZGxlLCBkc21faW1wbF9wcml2YXRlX3BtX2hhbmRs ZSBwbV9oYW5kbGUpCiB7Ci0JaWYgKGVycm5vID09IEVGQklHIHx8IGVycm5vID09IEVOT01F TSkKLQkJcmV0dXJuIGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKTsKLQllbHNlCi0J CXJldHVybiBlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGxfbW1hcC5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvZHNtX2ltcGxfbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi44ZGQ3ZDFlZWI3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL2RzbV9pbXBsX21tYXAuYwpAQCAtMCwwICsxLDMwMCBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogZHNtX2ltcGxfbW1hcC5jCisgKgkgIE9wZXJhdGlu ZyBzeXN0ZW0gcHJpbWl0aXZlcyB0byBzdXBwb3J0IG1tYXAtYmFzZWQgc2hhcmVkIG1lbW9y eS4KKyAqCisgKiBDYWxsaW5nIHRoaXMgInNoYXJlZCBtZW1vcnkiIGlzIHNvbWV3aGF0IG9m IGEgbWlzbm9tZXIsIGJlY2F1c2Ugd2hhdAorICogd2UncmUgcmVhbGx5IGRvaW5nIGlzIGNy ZWF0aW5nIGEgYnVuY2ggb2YgZmlsZXMgYW5kIG1hcHBpbmcgdGhlbSBpbnRvCisgKiBvdXIg YWRkcmVzcyBzcGFjZS4gIFRoZSBvcGVyYXRpbmcgc3lzdGVtIG1heSBmZWVsIG9ibGlnZWQg dG8KKyAqIHN5bmNocm9uaXplIHRoZSBjb250ZW50cyB0byBkaXNrIGV2ZW4gaWYgbm90aGlu ZyBpcyBiZWluZyBwYWdlZCBvdXQsCisgKiB3aGljaCB3aWxsIG5vdCBzZXJ2ZSB1cyB3ZWxs LiAgVGhlIHVzZXIgY2FuIHJlbG9jYXRlIHRoZSBwZ19keW5zaG1lbQorICogZGlyZWN0b3J5 IHRvIGEgcmFtZGlzayB0byBhdm9pZCB0aGlzIHByb2JsZW0sIGlmIGF2YWlsYWJsZS4KKyAq CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElE RU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsX21t YXAuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdy ZXMuaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZu ZGVmIFdJTjMyCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5o PgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAi Y29tbW9uL3BnX3BybmcuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJwb3J0YWJpbGl0eS9tZW0uaCIKKyNpbmNsdWRlICJzdG9y YWdlL2RzbV9pbXBsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorCisjaWZkZWYgVVNF X0RTTV9NTUFQCisKKy8qIFNpemUgb2YgYnVmZmVyIHRvIGJlIHVzZWQgZm9yIHplcm8tZmls bGluZy4gKi8KKyNkZWZpbmUgWkJVRkZFUl9TSVpFCQkJCTgxOTIKKworc3RhdGljIGRzbV9p bXBsX2hhbmRsZQorZHNtX2ltcGxfbW1hcF9jcmVhdGUoU2l6ZSByZXF1ZXN0X3NpemUsIGRz bV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwKKwkJCQkJIHZvaWQgKiptYXBwZWRfYWRk cmVzcywgaW50IGVsZXZlbCkKK3sKKwljaGFyCQluYW1lWzY0XTsKKwlpbnQJCQlmbGFnczsK KwlpbnQJCQlmZDsKKwljaGFyCSAgICphZGRyZXNzOworCWRzbV9pbXBsX2hhbmRsZSBoYW5k bGU7CisKKwkvKgorCSAqIENyZWF0ZSBuZXcgc2VnbWVudCwgd2l0aCBhIHJhbmRvbSBuYW1l LiAgSWYgdGhlIG5hbWUgaXMgYWxyZWFkeSBpbiB1c2UsCisJICogcmV0cnkgdW50aWwgd2Ug ZmluZCBhbiB1bnVzZWQgbmFtZS4KKwkgKi8KKwlmb3IgKDs7KQorCXsKKwkJZG8KKwkJewor CQkJaGFuZGxlID0gcGdfcHJuZ191aW50MzIoJnBnX2dsb2JhbF9wcm5nX3N0YXRlKTsKKwkJ fSB3aGlsZSAoaGFuZGxlID09IERTTV9JTVBMX0hBTkRMRV9JTlZBTElEKTsKKworCQlzbnBy aW50ZihuYW1lLCA2NCwgUEdfRFlOU0hNRU1fRElSICIvIiBQR19EWU5TSE1FTV9NTUFQX0ZJ TEVfUFJFRklYICIldSIsCisJCQkJIGhhbmRsZSk7CisKKwkJLyogQ3JlYXRlIG5ldyBzZWdt ZW50IG9yIG9wZW4gYW4gZXhpc3Rpbmcgb25lIGZvciBhdHRhY2guICovCisJCWZsYWdzID0g T19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTDsKKwkJaWYgKChmZCA9IE9wZW5UcmFuc2llbnRG aWxlKG5hbWUsIGZsYWdzKSkgPT0gLTEpCisJCXsKKwkJCWlmIChlcnJubyA9PSBFRVhJU1Qp CisJCQkJY29udGludWU7CisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycmNvZGVfZm9y X2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3Bl biBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCisJCQkJCQkJbmFtZSkpKTsK KwkJCXJldHVybiBEU01fSU1QTF9IQU5ETEVfSU5WQUxJRDsKKwkJfQorCQlicmVhazsKKwl9 CisKKwkvKiBFbmxhcmdlIGl0IHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gKi8KKwl7CisJCS8q CisJCSAqIEFsbG9jYXRlIGEgYnVmZmVyIGZ1bGwgb2YgemVyb3MuCisJCSAqCisJCSAqIE5v dGU6IHBhbGxvYyB6YnVmZmVyLCBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgYSBsb2NhbCBjaGFy IGFycmF5LCB0bworCQkgKiBlbnN1cmUgaXQgaXMgcmVhc29uYWJseSB3ZWxsLWFsaWduZWQ7 IHRoaXMgbWF5IHNhdmUgYSBmZXcgY3ljbGVzCisJCSAqIHRyYW5zZmVycmluZyBkYXRhIHRv IHRoZSBrZXJuZWwuCisJCSAqLworCQljaGFyCSAgICp6YnVmZmVyID0gKGNoYXIgKikgcGFs bG9jMChaQlVGRkVSX1NJWkUpOworCQlTaXplCQlyZW1haW5pbmcgPSByZXF1ZXN0X3NpemU7 CisJCWJvb2wJCXN1Y2Nlc3MgPSB0cnVlOworCisJCS8qCisJCSAqIFplcm8tZmlsbCB0aGUg ZmlsZS4gV2UgaGF2ZSB0byBkbyB0aGlzIHRoZSBoYXJkIHdheSB0byBlbnN1cmUgdGhhdAor CQkgKiBhbGwgdGhlIGZpbGUgc3BhY2UgaGFzIHJlYWxseSBiZWVuIGFsbG9jYXRlZCwgc28g dGhhdCB3ZSBkb24ndAorCQkgKiBsYXRlciBzZWcgZmF1bHQgd2hlbiBhY2Nlc3NpbmcgdGhl IG1lbW9yeSBtYXBwaW5nLiAgVGhpcyBpcyBwcmV0dHkKKwkJICogcGVzc2ltYWwuCisJCSAq LworCQl3aGlsZSAoc3VjY2VzcyAmJiByZW1haW5pbmcgPiAwKQorCQl7CisJCQlTaXplCQln b2FsID0gcmVtYWluaW5nOworCisJCQlpZiAoZ29hbCA+IFpCVUZGRVJfU0laRSkKKwkJCQln b2FsID0gWkJVRkZFUl9TSVpFOworCQkJcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRf RVZFTlRfRFNNX0ZJTExfWkVST19XUklURSk7CisJCQlpZiAod3JpdGUoZmQsIHpidWZmZXIs IGdvYWwpID09IGdvYWwpCisJCQkJcmVtYWluaW5nIC09IGdvYWw7CisJCQllbHNlCisJCQkJ c3VjY2VzcyA9IGZhbHNlOworCQkJcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOworCQl9CisK KwkJaWYgKCFzdWNjZXNzKQorCQl7CisJCQlpbnQJCQlzYXZlX2Vycm5vOworCisJCQkvKiBC YWNrIG91dCB3aGF0J3MgYWxyZWFkeSBiZWVuIGRvbmUuICovCisJCQlzYXZlX2Vycm5vID0g ZXJybm87CisJCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOworCQkJdW5saW5rKG5hbWUpOwor CQkJZXJybm8gPSBzYXZlX2Vycm5vID8gc2F2ZV9lcnJubyA6IEVOT1NQQzsKKworCQkJZXJl cG9ydChlbGV2ZWwsCisJCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnko KSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IHJlc2l6ZSBzaGFyZWQgbWVtb3J5IHNlZ21l bnQgXCIlc1wiIHRvICV6dSBieXRlczogJW0iLAorCQkJCQkJCW5hbWUsIHJlcXVlc3Rfc2l6 ZSkpKTsKKwkJCXJldHVybiBEU01fSU1QTF9IQU5ETEVfSU5WQUxJRDsKKwkJfQorCX0KKwor CS8qIE1hcCBpdCB0byB0aGlzIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLiAqLworCWFkZHJl c3MgPSBtbWFwKE5VTEwsIHJlcXVlc3Rfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwK KwkJCQkgICBNQVBfU0hBUkVEIHwgTUFQX0hBU1NFTUFQSE9SRSB8IE1BUF9OT1NZTkMsIGZk LCAwKTsKKwlpZiAoYWRkcmVzcyA9PSBNQVBfRkFJTEVEKQorCXsKKwkJaW50CQkJc2F2ZV9l cnJubzsKKworCQkvKiBCYWNrIG91dCB3aGF0J3MgYWxyZWFkeSBiZWVuIGRvbmUuICovCisJ CXNhdmVfZXJybm8gPSBlcnJubzsKKwkJQ2xvc2VUcmFuc2llbnRGaWxlKGZkKTsKKwkJdW5s aW5rKG5hbWUpOworCQllcnJubyA9IHNhdmVfZXJybm87CisKKwkJZXJlcG9ydChlbGV2ZWws CisJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAorCQkJCSBlcnJt c2coImNvdWxkIG5vdCBtYXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAor CQkJCQkJbmFtZSkpKTsKKwkJcmV0dXJuIERTTV9JTVBMX0hBTkRMRV9JTlZBTElEOworCX0K KworCS8qIE9uY2UgaXQncyBtYXBwZWQsIHdlIGRvbid0IG5lZWQgdGhlIGZpbGUgZGVzY3Jp cHRvciBmb3IgaXQgYW55bW9yZS4gKi8KKwlpZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAh PSAwKQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNj ZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IGNsb3NlIHNoYXJlZCBtZW1vcnkgc2Vn bWVudCBcIiVzXCI6ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJldHVybiBEU01fSU1QTF9I QU5ETEVfSU5WQUxJRDsKKwl9CisKKwkqbWFwcGVkX2FkZHJlc3MgPSBhZGRyZXNzOworCSpp bXBsX3ByaXZhdGUgPSAwOwkJCS8qIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24g Ki8KKwlyZXR1cm4gaGFuZGxlOworfQorCitzdGF0aWMgYm9vbAorZHNtX2ltcGxfbW1hcF9h dHRhY2goZHNtX2ltcGxfaGFuZGxlIGhhbmRsZSwKKwkJCQkJIGRzbV9pbXBsX3ByaXZhdGUg KmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLCBTaXplICptYXBwZWRfc2l6 ZSwKKwkJCQkJIGludCBlbGV2ZWwpCit7CisJY2hhcgkJbmFtZVs2NF07CisJaW50CQkJZmxh Z3M7CisJaW50CQkJZmQ7CisJY2hhcgkgICAqYWRkcmVzczsKKwlTaXplCQlzaXplOworCXN0 cnVjdCBzdGF0IHN0OworCisJc25wcmludGYobmFtZSwgNjQsIFBHX0RZTlNITUVNX0RJUiAi LyIgUEdfRFlOU0hNRU1fTU1BUF9GSUxFX1BSRUZJWCAiJXUiLAorCQkJIGhhbmRsZSk7CisK KwkvKiBPcGVuIGFuIGV4aXN0aW5nIGZpbGUgZm9yIGF0dGFjaC4gKi8KKwlmbGFncyA9IE9f UkRXUjsKKwlpZiAoKGZkID0gT3BlblRyYW5zaWVudEZpbGUobmFtZSwgZmxhZ3MpKSA9PSAt MSkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3No YXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBzaGFyZWQgbWVt b3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCisJCQkJCQluYW1lKSkpOworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNpemUuICovCisJaWYgKGZz dGF0KGZkLCAmc3QpICE9IDApCisJeworCQlpbnQJCQlzYXZlX2Vycm5vOworCisJCS8qIEJh Y2sgb3V0IHdoYXQncyBhbHJlYWR5IGJlZW4gZG9uZS4gKi8KKwkJc2F2ZV9lcnJubyA9IGVy cm5vOworCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOworCQllcnJubyA9IHNhdmVfZXJybm87 CisKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVk X21lbW9yeSgpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0IHNoYXJlZCBtZW1vcnkg c2VnbWVudCBcIiVzXCI6ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJldHVybiBmYWxzZTsK Kwl9CisJc2l6ZSA9IHN0LnN0X3NpemU7CisKKwkvKiBNYXAgaXQgdG8gdGhpcyBwcm9jZXNz J3MgYWRkcmVzcyBzcGFjZS4gKi8KKwlhZGRyZXNzID0gbW1hcChOVUxMLCBzaXplLCBQUk9U X1JFQUQgfCBQUk9UX1dSSVRFLAorCQkJCSAgIE1BUF9TSEFSRUQgfCBNQVBfSEFTU0VNQVBI T1JFIHwgTUFQX05PU1lOQywgZmQsIDApOworCWlmIChhZGRyZXNzID09IE1BUF9GQUlMRUQp CisJeworCQlpbnQJCQlzYXZlX2Vycm5vOworCisJCS8qIEJhY2sgb3V0IHdoYXQncyBhbHJl YWR5IGJlZW4gZG9uZS4gKi8KKwkJc2F2ZV9lcnJubyA9IGVycm5vOworCQlDbG9zZVRyYW5z aWVudEZpbGUoZmQpOworCQllcnJubyA9IHNhdmVfZXJybm87CisKKwkJZXJlcG9ydChlbGV2 ZWwsCisJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAorCQkJCSBl cnJtc2coImNvdWxkIG5vdCBtYXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0i LAorCQkJCQkJbmFtZSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIE9uY2UgaXQn cyBtYXBwZWQsIHdlIGRvbid0IG5lZWQgdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgaXQgYW55 bW9yZSAqLworCWlmIChDbG9zZVRyYW5zaWVudEZpbGUoZmQpICE9IDApCisJeworCQllcmVw b3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJy bXNnKCJjb3VsZCBub3QgY2xvc2Ugc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0i LAorCQkJCQkJbmFtZSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCSptYXBwZWRfYWRk cmVzcyA9IGFkZHJlc3M7CisJKm1hcHBlZF9zaXplID0gc2l6ZTsKKwkqaW1wbF9wcml2YXRl ID0gMDsJCQkvKiBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uICovCisJcmV0dXJu IHRydWU7Cit9CisKK3N0YXRpYyBib29sCitkc21faW1wbF9tbWFwX2RldGFjaChkc21faW1w bF9oYW5kbGUgaGFuZGxlLAorCQkJCQkgZHNtX2ltcGxfcHJpdmF0ZSBpbXBsX3ByaXZhdGUs IHZvaWQgKm1hcHBlZF9hZGRyZXNzLCBTaXplIG1hcHBlZF9zaXplLAorCQkJCQkgaW50IGVs ZXZlbCkKK3sKKwljaGFyCQluYW1lWzY0XTsKKworCUFzc2VydChtYXBwZWRfYWRkcmVzcyAh PSBOVUxMKTsKKwlBc3NlcnQoaW1wbF9wcml2YXRlID09IDApOwkvKiBub3QgdXNlZCBieSB0 aGlzIGltcGxlbWVudGF0aW9uICovCisKKwlzbnByaW50ZihuYW1lLCA2NCwgUEdfRFlOU0hN RU1fRElSICIvIiBQR19EWU5TSE1FTV9NTUFQX0ZJTEVfUFJFRklYICIldSIsCisJCQkgaGFu ZGxlKTsKKworCWlmIChtdW5tYXAobWFwcGVkX2FkZHJlc3MsIG1hcHBlZF9zaXplKSAhPSAw KQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hh cmVkX21lbW9yeSgpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB1bm1hcCBzaGFyZWQgbWVt b3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCisJCQkJCQluYW1lKSkpOworCQlyZXR1cm4gZmFs c2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorZHNtX2ltcGxfbW1h cF9kZXN0cm95KGRzbV9pbXBsX2hhbmRsZSBoYW5kbGUsIGludCBlbGV2ZWwpCit7CisJY2hh cgkJbmFtZVs2NF07CisKKwlzbnByaW50ZihuYW1lLCA2NCwgUEdfRFlOU0hNRU1fRElSICIv IiBQR19EWU5TSE1FTV9NTUFQX0ZJTEVfUFJFRklYICIldSIsCisJCQkgaGFuZGxlKTsKKwor CWlmICh1bmxpbmsobmFtZSkgIT0gMCkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShl cnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgcmVtb3ZlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKKwkJCQkJ CW5hbWUpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK2Nv bnN0IGRzbV9pbXBsX29wcyBkc21faW1wbF9tbWFwX29wcyA9IHsKKwkuY3JlYXRlID0gZHNt X2ltcGxfbW1hcF9jcmVhdGUsCisJLmF0dGFjaCA9IGRzbV9pbXBsX21tYXBfYXR0YWNoLAor CS5kZXRhY2ggPSBkc21faW1wbF9tbWFwX2RldGFjaCwKKwkuZGVzdHJveSA9IGRzbV9pbXBs X21tYXBfZGVzdHJveSwKKwkucGluX3NlZ21lbnQgPSBkc21faW1wbF9ub29wX3Bpbl9zZWdt ZW50LAorCS51bnBpbl9zZWdtZW50ID0gZHNtX2ltcGxfbm9vcF91bnBpbl9zZWdtZW50LAor fTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21f aW1wbF9wb3NpeC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGxfcG9zaXgu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjljODczY2Q5NjEK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbF9w b3NpeC5jCkBAIC0wLDAgKzEsMzQxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBkc21faW1wbF9wb3NpeC5jCisgKgkgIE9wZXJhdGluZyBzeXN0ZW0gcHJpbWl0aXZlcyB0 byBzdXBwb3J0IFBPU0lYIHNoYXJlZCBtZW1vcnkuCisgKgorICogUE9TSVggc2hhcmVkIG1l bW9yeSBzZWdtZW50cyBhcmUgY3JlYXRlZCBhbmQgYXR0YWNoZWQgdXNpbmcgc2htX29wZW4o KQorICogYW5kIHNobV91bmxpbmsoKTsgb3RoZXIgb3BlcmF0aW9ucywgc3VjaCBhcyBzaXpp bmcgb3IgbWFwcGluZyB0aGUKKyAqIHNlZ21lbnQsIGFyZSBwZXJmb3JtZWQgYXMgaWYgdGhl IHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgd2VyZSBmaWxlcy4KKyAqCisgKiBJbmRlZWQsIG9u IHNvbWUgcGxhdGZvcm1zLCB0aGV5IG1heSBiZSBpbXBsZW1lbnRlZCB0aGF0IHdheS4gIFdo aWxlCisgKiBQT1NJWCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIHNlZW0gaW50ZW5kZWQgdG8g ZXhpc3QgaW4gYSBmbGF0IG5hbWVzcGFjZSwKKyAqIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMg bWF5IGltcGxlbWVudCB0aGVtIGFzIGZpbGVzLCBldmVuIGdvaW5nIHNvIGZhcgorICogdG8g dHJlYXQgYSByZXF1ZXN0IGZvciAveHl6IGFzIGEgcmVxdWVzdCB0byBjcmVhdGUgYSBmaWxl IGJ5IHRoYXQgbmFtZQorICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5LiAgVXNlcnMgb2Ygc3Vj aCBicm9rZW4gcGxhdGZvcm1zIHNob3VsZCBzZWxlY3QKKyAqIGEgZGlmZmVyZW50IHNoYXJl ZCBtZW1vcnkgaW1wbGVtZW50YXRpb24uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbF9wb3NpeC5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmNudGwu aD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpZm5kZWYg V0lOMzIKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cisj ZW5kaWYKKworI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21t b24vcGdfcHJuZy5oIgorI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCisjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9ydGFiaWxp dHkvbWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21faW1wbC5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvZmQuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9t ZW11dGlscy5oIgorCisjaWZkZWYgVVNFX0RTTV9QT1NJWAorCitzdGF0aWMgaW50CWRzbV9p bXBsX3Bvc2l4X3Jlc2l6ZShpbnQgZmQsIG9mZl90IHNpemUpOworCitzdGF0aWMgZHNtX2lt cGxfaGFuZGxlCitkc21faW1wbF9wb3NpeF9jcmVhdGUoU2l6ZSByZXF1ZXN0X3NpemUsIGRz bV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwKKwkJCQkJICB2b2lkICoqbWFwcGVkX2Fk ZHJlc3MsIGludCBlbGV2ZWwpCit7CisJY2hhcgkJbmFtZVs2NF07CisJaW50CQkJZmxhZ3M7 CisJaW50CQkJZmQ7CisJY2hhcgkgICAqYWRkcmVzczsKKwlkc21faW1wbF9oYW5kbGUgaGFu ZGxlOworCisJLyoKKwkgKiBFdmVuIHRob3VnaCB3ZSB3aWxsIGNsb3NlIHRoZSBGRCBiZWZv cmUgcmV0dXJuaW5nLCBpdCBzZWVtcyBkZXNpcmFibGUKKwkgKiB0byB1c2UgUmVzZXJ2ZS9S ZWxlYXNlRXh0ZXJuYWxGRCwgdG8gcmVkdWNlIHRoZSBwcm9iYWJpbGl0eSBvZiBFTUZJTEUK KwkgKiBmYWlsdXJlLiAgVGhlIGZhY3QgdGhhdCB3ZSB3b24ndCBob2xkIHRoZSBGRCBvcGVu IGxvbmcganVzdGlmaWVzIHVzaW5nCisJICogUmVzZXJ2ZUV4dGVybmFsRkQgcmF0aGVyIHRo YW4gQWNxdWlyZUV4dGVybmFsRkQsIHRob3VnaC4KKwkgKi8KKwlSZXNlcnZlRXh0ZXJuYWxG RCgpOworCisJLyoKKwkgKiBDcmVhdGUgbmV3IHNlZ21lbnQsIHdpdGggYSByYW5kb20gbmFt ZS4gIElmIHRoZSBuYW1lIGlzIGFscmVhZHkgaW4gdXNlLAorCSAqIHJldHJ5IHVudGlsIHdl IGZpbmQgYW4gdW51c2VkIG5hbWUuCisJICovCisJZm9yICg7OykKKwl7CisJCWRvCisJCXsK KwkJCWhhbmRsZSA9IHBnX3BybmdfdWludDMyKCZwZ19nbG9iYWxfcHJuZ19zdGF0ZSk7CisJ CX0gd2hpbGUgKGhhbmRsZSA9PSBEU01fSU1QTF9IQU5ETEVfSU5WQUxJRCk7CisKKwkJc25w cmludGYobmFtZSwgNjQsICIvUG9zdGdyZVNRTC4ldSIsIGhhbmRsZSk7CisKKwkJZmxhZ3Mg PSBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMOworCQlpZiAoKGZkID0gc2htX29wZW4obmFt ZSwgZmxhZ3MsIFBHX0ZJTEVfTU9ERV9PV05FUikpID09IC0xKQorCQl7CisJCQlSZWxlYXNl RXh0ZXJuYWxGRCgpOworCQkJaWYgKGVycm5vID09IEVFWElTVCkKKwkJCQljb250aW51ZTsK KwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRf bWVtb3J5KCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIHNoYXJlZCBtZW1vcnkg c2VnbWVudCBcIiVzXCI6ICVtIiwKKwkJCQkJCQluYW1lKSkpOworCQkJcmV0dXJuIERTTV9J TVBMX0hBTkRMRV9JTlZBTElEOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIEVubGFyZ2Ug aXQgdG8gdGhlIHJlcXVlc3RlZCBzaXplLiAqLworCWlmIChkc21faW1wbF9wb3NpeF9yZXNp emUoZmQsIHJlcXVlc3Rfc2l6ZSkgIT0gMCkKKwl7CisJCWludAkJCXNhdmVfZXJybm87CisK KwkJLyogQmFjayBvdXQgd2hhdCdzIGFscmVhZHkgYmVlbiBkb25lLiAqLworCQlzYXZlX2Vy cm5vID0gZXJybm87CisJCWNsb3NlKGZkKTsKKwkJUmVsZWFzZUV4dGVybmFsRkQoKTsKKwkJ c2htX3VubGluayhuYW1lKTsKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCisJCWVyZXBvcnQo ZWxldmVsLAorCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJ CQkgZXJybXNnKCJjb3VsZCBub3QgcmVzaXplIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVz XCIgdG8gJXp1IGJ5dGVzOiAlbSIsCisJCQkJCQluYW1lLCByZXF1ZXN0X3NpemUpKSk7CisJ CXJldHVybiBEU01fSU1QTF9IQU5ETEVfSU5WQUxJRDsKKwl9CisKKwkvKiBNYXAgaXQgdG8g dGhpcyBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS4gKi8KKwlhZGRyZXNzID0gbW1hcChOVUxM LCByZXF1ZXN0X3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCQkJICAgTUFQX1NI QVJFRCB8IE1BUF9IQVNTRU1BUEhPUkUgfCBNQVBfTk9TWU5DLCBmZCwgMCk7CisJaWYgKGFk ZHJlc3MgPT0gTUFQX0ZBSUxFRCkKKwl7CisJCWludAkJCXNhdmVfZXJybm87CisKKwkJLyog QmFjayBvdXQgd2hhdCdzIGFscmVhZHkgYmVlbiBkb25lLiAqLworCQlzYXZlX2Vycm5vID0g ZXJybm87CisJCWNsb3NlKGZkKTsKKwkJUmVsZWFzZUV4dGVybmFsRkQoKTsKKwkJc2htX3Vu bGluayhuYW1lKTsKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCisJCWVyZXBvcnQoZWxldmVs LAorCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJy bXNnKCJjb3VsZCBub3QgbWFwIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwK KwkJCQkJCW5hbWUpKSk7CisJCXJldHVybiBEU01fSU1QTF9IQU5ETEVfSU5WQUxJRDsKKwl9 CisKKwkvKiBPbmNlIGl0J3MgbWFwcGVkLCB3ZSBkb24ndCBuZWVkIHRoZSBmaWxlIGRlc2Ny aXB0b3IgZm9yIGl0IGFueW1vcmUuICovCisJY2xvc2UoZmQpOworCVJlbGVhc2VFeHRlcm5h bEZEKCk7CisKKwkqbWFwcGVkX2FkZHJlc3MgPSBhZGRyZXNzOworCSppbXBsX3ByaXZhdGUg PSAwOwkJCS8qIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24gKi8KKwlyZXR1cm4g aGFuZGxlOworfQorCitzdGF0aWMgYm9vbAorZHNtX2ltcGxfcG9zaXhfYXR0YWNoKGRzbV9p bXBsX2hhbmRsZSBoYW5kbGUsIGRzbV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwKKwkJ CQkJICB2b2lkICoqbWFwcGVkX2FkZHJlc3MsIFNpemUgKm1hcHBlZF9zaXplLAorCQkJCQkg IGludCBlbGV2ZWwpCit7CisJY2hhcgkJbmFtZVs2NF07CisJaW50CQkJZmxhZ3M7CisJaW50 CQkJZmQ7CisJY2hhcgkgICAqYWRkcmVzczsKKwlTaXplCQlzaXplOworCXN0cnVjdCBzdGF0 IHN0OworCisJc25wcmludGYobmFtZSwgNjQsICIvUG9zdGdyZVNRTC4ldSIsIGhhbmRsZSk7 CisKKwkvKiBMaWtlIGluIGRzbV9pbXBsX3Bvc2l4X2F0dGFjaCwgbWFrZSBzdXJlIGFuIEZE IGlzIGF2YWlsYWJsZSAqLworCVJlc2VydmVFeHRlcm5hbEZEKCk7CisKKwlmbGFncyA9IE9f UkRXUjsKKwlpZiAoKGZkID0gc2htX29wZW4obmFtZSwgZmxhZ3MsIFBHX0ZJTEVfTU9ERV9P V05FUikpID09IC0xKQorCXsKKwkJUmVsZWFzZUV4dGVybmFsRkQoKTsKKwkJZXJlcG9ydChl bGV2ZWwsCisJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAorCQkJ CSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6 ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBEZXRl cm1pbmUgdGhlIGN1cnJlbnQgc2l6ZSAqLworCWlmIChmc3RhdChmZCwgJnN0KSAhPSAwKQor CXsKKwkJaW50CQkJc2F2ZV9lcnJubzsKKworCQkvKiBCYWNrIG91dCB3aGF0J3MgYWxyZWFk eSBiZWVuIGRvbmUuICovCisJCXNhdmVfZXJybm8gPSBlcnJubzsKKwkJY2xvc2UoZmQpOwor CQlSZWxlYXNlRXh0ZXJuYWxGRCgpOworCQllcnJubyA9IHNhdmVfZXJybm87CisKKwkJZXJl cG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgp LAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0IHNoYXJlZCBtZW1vcnkgc2VnbWVudCBc IiVzXCI6ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJc2l6 ZSA9IHN0LnN0X3NpemU7CisKKwkvKiBNYXAgaXQgdG8gdGhpcyBwcm9jZXNzJ3MgYWRkcmVz cyBzcGFjZS4gKi8KKwlhZGRyZXNzID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFLAorCQkJCSAgIE1BUF9TSEFSRUQgfCBNQVBfSEFTU0VNQVBIT1JFIHwgTUFQ X05PU1lOQywgZmQsIDApOworCWlmIChhZGRyZXNzID09IE1BUF9GQUlMRUQpCisJeworCQlp bnQJCQlzYXZlX2Vycm5vOworCisJCS8qIEJhY2sgb3V0IHdoYXQncyBhbHJlYWR5IGJlZW4g ZG9uZS4gKi8KKwkJc2F2ZV9lcnJubyA9IGVycm5vOworCQljbG9zZShmZCk7CisJCVJlbGVh c2VFeHRlcm5hbEZEKCk7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKworCQllcmVwb3J0KGVs ZXZlbCwKKwkJCQkoZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCisJCQkJ IGVycm1zZygiY291bGQgbm90IG1hcCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAl bSIsCisJCQkJCQluYW1lKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogT25jZSBp dCdzIG1hcHBlZCwgd2UgZG9uJ3QgbmVlZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciBpdCBh bnltb3JlICovCisJY2xvc2UoZmQpOworCVJlbGVhc2VFeHRlcm5hbEZEKCk7CisKKwkqbWFw cGVkX2FkZHJlc3MgPSBhZGRyZXNzOworCSptYXBwZWRfc2l6ZSA9IHNpemU7CisJKmltcGxf cHJpdmF0ZSA9IDA7CQkJLyogbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiAqLwor CXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorZHNtX2ltcGxfcG9zaXhfZGV0YWNo KGRzbV9pbXBsX2hhbmRsZSBoYW5kbGUsIGRzbV9pbXBsX3ByaXZhdGUgaW1wbF9wcml2YXRl LAorCQkJCQkgIHZvaWQgKm1hcHBlZF9hZGRyZXNzLCBTaXplIG1hcHBlZF9zaXplLAorCQkJ CQkgIGludCBlbGV2ZWwpCit7CisJY2hhcgkJbmFtZVs2NF07CisKKwlBc3NlcnQobWFwcGVk X2FkZHJlc3MgIT0gTlVMTCk7CisJQXNzZXJ0KGltcGxfcHJpdmF0ZSA9PSAwKTsJLyogbm90 IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiAqLworCisJc25wcmludGYobmFtZSwgNjQs ICIvUG9zdGdyZVNRTC4ldSIsIGhhbmRsZSk7CisKKwlpZiAobXVubWFwKG1hcHBlZF9hZGRy ZXNzLCBtYXBwZWRfc2l6ZSkgIT0gMCkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShl cnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgdW5tYXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAorCQkJCQkJ bmFtZSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3Rh dGljIGJvb2wKK2RzbV9pbXBsX3Bvc2l4X2Rlc3Ryb3koZHNtX2ltcGxfaGFuZGxlIGhhbmRs ZSwgaW50IGVsZXZlbCkKK3sKKwljaGFyCQluYW1lWzY0XTsKKworCXNucHJpbnRmKG5hbWUs IDY0LCAiL1Bvc3RncmVTUUwuJXUiLCBoYW5kbGUpOworCisJaWYgKHNobV91bmxpbmsobmFt ZSkgIT0gMCkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlX2Zvcl9keW5h bWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVtb3ZlIHNo YXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJl dHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBTZXQgdGhlIHNp emUgb2YgYSB2aXJ0dWFsIG1lbW9yeSByZWdpb24gYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBk ZXNjcmlwdG9yLgorICogSWYgbmVjZXNzYXJ5LCBhbHNvIGVuc3VyZSB0aGF0IHZpcnR1YWwg bWVtb3J5IGlzIGFjdHVhbGx5IGFsbG9jYXRlZCBieSB0aGUKKyAqIG9wZXJhdGluZyBzeXN0 ZW0sIHRvIGF2b2lkIG5hc3R5IHN1cnByaXNlcyBsYXRlci4KKyAqCisgKiBSZXR1cm5zIG5v bi16ZXJvIGlmIGVpdGhlciB0cnVuY2F0aW9uIG9yIGFsbG9jYXRpb24gZmFpbHMsIGFuZCBz ZXRzIGVycm5vLgorICovCitzdGF0aWMgaW50Citkc21faW1wbF9wb3NpeF9yZXNpemUoaW50 IGZkLCBvZmZfdCBzaXplKQoreworCWludAkJCXJjOworCWludAkJCXNhdmVfZXJybm87CisJ c2lnc2V0X3QJc2F2ZV9zaWdtYXNrOworCisJLyoKKwkgKiBCbG9jayBhbGwgYmxvY2thYmxl IHNpZ25hbHMsIGV4Y2VwdCBTSUdRVUlULiAgcG9zaXhfZmFsbG9jYXRlKCkgY2FuIHJ1bgor CSAqIGZvciBxdWl0ZSBhIGxvbmcgdGltZSwgYW5kIGlzIGFuIGFsbC1vci1ub3RoaW5nIG9w ZXJhdGlvbi4gIElmIHdlCisJICogYWxsb3dlZCBTSUdVU1IxIHRvIGludGVycnVwdCB1cyBy ZXBlYXRlZGx5IChmb3IgZXhhbXBsZSwgZHVlIHRvCisJICogcmVjb3ZlcnkgY29uZmxpY3Rz KSwgdGhlIHJldHJ5IGxvb3AgbWlnaHQgbmV2ZXIgc3VjY2VlZC4KKwkgKi8KKwlpZiAoSXNV bmRlclBvc3RtYXN0ZXIpCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmQmxvY2tTaWcs ICZzYXZlX3NpZ21hc2spOworCisJcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZF TlRfRFNNX0FMTE9DQVRFKTsKKyNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFMTE9DQVRFKSAm JiBkZWZpbmVkKF9fbGludXhfXykKKworCS8qCisJICogT24gTGludXgsIGEgc2htX29wZW4g ZmQgaXMgYmFja2VkIGJ5IGEgdG1wZnMgZmlsZS4gIElmIHdlIHdlcmUgdG8gdXNlCisJICog ZnRydW5jYXRlLCB0aGUgZmlsZSB3b3VsZCBjb250YWluIGEgaG9sZS4gIEFjY2Vzc2luZyBt ZW1vcnkgYmFja2VkIGJ5IGEKKwkgKiBob2xlIGNhdXNlcyB0bXBmcyB0byBhbGxvY2F0ZSBw YWdlcywgd2hpY2ggZmFpbHMgd2l0aCBTSUdCVVMgaWYgdGhlcmUKKwkgKiBpcyBubyBtb3Jl IHRtcGZzIHNwYWNlIGF2YWlsYWJsZS4gIFNvIHdlIGFzayB0bXBmcyB0byBhbGxvY2F0ZSBw YWdlcworCSAqIGhlcmUsIHNvIHdlIGNhbiBmYWlsIGdyYWNlZnVsbHkgd2l0aCBFTk9TUEMg bm93IHJhdGhlciB0aGFuIHJpc2tpbmcKKwkgKiBTSUdCVVMgbGF0ZXIuCisJICoKKwkgKiBX ZSBzdGlsbCB1c2UgYSB0cmFkaXRpb25hbCBFSU5UUiByZXRyeSBsb29wIHRvIGhhbmRsZSBT SUdDT05ULgorCSAqIHBvc2l4X2ZhbGxvY2F0ZSgpIGRvZXNuJ3QgcmVzdGFydCBhdXRvbWF0 aWNhbGx5LCBhbmQgd2UgZG9uJ3Qgd2FudCB0aGlzCisJICogdG8gZmFpbCBpZiB5b3UgYXR0 YWNoIGEgZGVidWdnZXIuCisJICovCisJZG8KKwl7CisJCXJjID0gcG9zaXhfZmFsbG9jYXRl KGZkLCAwLCBzaXplKTsKKwl9IHdoaWxlIChyYyA9PSBFSU5UUik7CisKKwkvKgorCSAqIFRo ZSBjYWxsZXIgZXhwZWN0cyBlcnJubyB0byBiZSBzZXQsIGJ1dCBwb3NpeF9mYWxsb2NhdGUo KSBkb2Vzbid0IHNldAorCSAqIGl0LiAgSW5zdGVhZCBpdCByZXR1cm5zIGVycm9yIG51bWJl cnMgZGlyZWN0bHkuICBTbyBzZXQgZXJybm8sIGV2ZW4KKwkgKiB0aG91Z2ggd2UnbGwgYWxz byByZXR1cm4gcmMgdG8gaW5kaWNhdGUgc3VjY2VzcyBvciBmYWlsdXJlLgorCSAqLworCWVy cm5vID0gcmM7CisjZWxzZQorCS8qIEV4dGVuZCB0aGUgZmlsZSB0byB0aGUgcmVxdWVzdGVk IHNpemUuICovCisJZG8KKwl7CisJCXJjID0gZnRydW5jYXRlKGZkLCBzaXplKTsKKwl9IHdo aWxlIChyYyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworI2VuZGlmCisJcGdzdGF0X3JlcG9y dF93YWl0X2VuZCgpOworCisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCXsKKwkJc2F2ZV9l cnJubyA9IGVycm5vOworCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNhdmVfc2lnbWFz aywgTlVMTCk7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwl9CisKKwlyZXR1cm4gcmM7Cit9 CisKK2NvbnN0IGRzbV9pbXBsX29wcyBkc21faW1wbF9wb3NpeF9vcHMgPSB7CisJLmNyZWF0 ZSA9IGRzbV9pbXBsX3Bvc2l4X2NyZWF0ZSwKKwkuYXR0YWNoID0gZHNtX2ltcGxfcG9zaXhf YXR0YWNoLAorCS5kZXRhY2ggPSBkc21faW1wbF9wb3NpeF9kZXRhY2gsCisJLmRlc3Ryb3kg PSBkc21faW1wbF9wb3NpeF9kZXN0cm95LAorCS5waW5fc2VnbWVudCA9IGRzbV9pbXBsX25v b3BfcGluX3NlZ21lbnQsCisJLnVucGluX3NlZ21lbnQgPSBkc21faW1wbF9ub29wX3VucGlu X3NlZ21lbnQsCit9OworCisjZW5kaWYJCQkJCQkJLyogVVNFX0RTTV9QT1NJWCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGxfc3lzdi5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGxfc3lzdi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZGU3NDJkNDg1NAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsX3N5c3YuYwpAQCAtMCwwICsxLDIy NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZHNtX2ltcGxfc3lzdi5jCisg KgkgIE9wZXJhdGluZyBzeXN0ZW0gcHJpbWl0aXZlcyB0byBzdXBwb3J0IFN5c3RlbSBWIHNo YXJlZCBtZW1vcnkuCisgKgorICogU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBh cmUgbWFuaXB1bGF0ZWQgdXNpbmcgc2htZ2V0KCksIHNobWF0KCksCisgKiBzaG1kdCgpLCBh bmQgc2htY3RsKCkuICBBcyB0aGUgZGVmYXVsdCBhbGxvY2F0aW9uIGxpbWl0cyBmb3IgU3lz dGVtIFYKKyAqIHNoYXJlZCBtZW1vcnkgYXJlIHVzdWFsbHkgcXVpdGUgbG93LCB0aGUgUE9T SVggZmFjaWxpdGllcyBtYXkgYmUKKyAqIHByZWZlcmFibGU7IGJ1dCB0aG9zZSBhcmUgbm90 IHN1cHBvcnRlZCBldmVyeXdoZXJlLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvZHNtX2ltcGxfc3lzdi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDxmY250bC5o PgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg PHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL2lwYy5oPgorI2luY2x1ZGUgPHN5cy9zaG0u aD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVy bS5oIgorI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCisjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9ydGFiaWxpdHkvbWVtLmgi CisjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9kc21faW1wbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKKyNpbmNsdWRlICJ1dGls cy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisjaWZkZWYgVVNFX0RT TV9TWVNWCisKKy8qCisgKiBSZXR1cm4gdGhlIHNlZ21lbnQncyBzaG1pZCBhcyBhIGhhbmRs ZS4KKyAqCisgKiBCZWNhdXNlIDAgaXMgYSB2YWxpZCBzaG1pZCwgYnV0IG5vdCBhIHZhbGlk IGRzbV9pbXBsX2hhbmRsZSwgYWRkIG9uZSB0bworICogYXZvaWQgaXQuICBUaGUgdmFsaWQg cmFuZ2UgZm9yIHNobWlkIGlzIGZyb20gMCB0byBJTlRfTUFYLCBzbyBpdCBmaXRzIGluCisg KiB1aW50MzIgdGhpcyB3YXkuCisgKi8KK3N0YXRpYyBpbmxpbmUgZHNtX2ltcGxfaGFuZGxl CitoYW5kbGVfZnJvbV9zaG1pZChpbnQgc2htaWQpCit7CisJcmV0dXJuICgodWludDMyKSBz aG1pZCkgKyAxOworfQorCitzdGF0aWMgaW5saW5lIGludAorc2htaWRfZnJvbV9oYW5kbGUo ZHNtX2ltcGxfaGFuZGxlIGhhbmRsZSkKK3sKKwlyZXR1cm4gaGFuZGxlIC0gMTsKK30KKwor c3RhdGljIGRzbV9pbXBsX2hhbmRsZQorZHNtX2ltcGxfc3lzdl9jcmVhdGUoU2l6ZSByZXF1 ZXN0X3NpemUsCisJCQkJCSBkc21faW1wbF9wcml2YXRlICppbXBsX3ByaXZhdGUsIHZvaWQg KiptYXBwZWRfYWRkcmVzcywKKwkJCQkJIGludCBlbGV2ZWwpCit7CisJaW50CQkJaWRlbnQ7 CisJY2hhcgkgICAqYWRkcmVzczsKKwljaGFyCQluYW1lWzY0XTsKKworCS8qCisJICogQ3Jl YXRlIGEgbmV3IHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gIFdlIGxldCBzaG1nZXQoKSBwaWNr IGEgdW5pcXVlCisJICogaWRlbnRpZmllciBmb3IgdXMuCisJICovCisJaWYgKChpZGVudCA9 IHNobWdldChJUENfUFJJVkFURSwgcmVxdWVzdF9zaXplLCBJUENQcm90ZWN0aW9uIHwgSVBD X0NSRUFUIHwgSVBDX0VYQ0wpKSA9PSAtMSkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJ CShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJybXNnKCJj b3VsZCBub3QgY3JlYXRlIHNoYXJlZCBtZW1vcnkgc2VnbWVudDogJW0iKSkpOworCQlyZXR1 cm4gRFNNX0lNUExfSEFORExFX0lOVkFMSUQ7CisJfQorCisJLyoKKwkgKiBQT1NJWCBzaGFy ZWQgbWVtb3J5IGFuZCBtbWFwLWJhc2VkIHNoYXJlZCBtZW1vcnkgaWRlbnRpZnkgc2VnbWVu dHMgd2l0aAorCSAqIG5hbWVzLiAgVG8gYXZvaWQgbmVlZGxlc3MgZXJyb3IgbWVzc2FnZSB2 YXJpYXRpb24sIHdlIHVzZSB0aGUgc2htaWQgYXMKKwkgKiB0aGUgbmFtZS4KKwkgKi8KKwlz bnByaW50ZihuYW1lLCA2NCwgInNobWlkICVkIiwgaWRlbnQpOworCisJLyogTWFwIGl0IHRv IHRoaXMgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuICovCisJYWRkcmVzcyA9IHNobWF0KGlk ZW50LCBOVUxMLCBQR19TSE1BVF9GTEFHUyk7CisJaWYgKGFkZHJlc3MgPT0gKHZvaWQgKikg LTEpCisJeworCQlpbnQJCQlzYXZlX2Vycm5vOworCisJCS8qIEJhY2sgb3V0IHdoYXQncyBh bHJlYWR5IGJlZW4gZG9uZS4gKi8KKwkJc2F2ZV9lcnJubyA9IGVycm5vOworCQlzaG1jdGwo aWRlbnQsIElQQ19STUlELCBOVUxMKTsKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCisJCWVy ZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnko KSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgbWFwIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBc IiVzXCI6ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJldHVybiBEU01fSU1QTF9IQU5ETEVf SU5WQUxJRDsKKwl9CisJKm1hcHBlZF9hZGRyZXNzID0gYWRkcmVzczsKKwkqaW1wbF9wcml2 YXRlID0gMDsJCQkvKiBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uICovCisKKwly ZXR1cm4gaGFuZGxlX2Zyb21fc2htaWQoaWRlbnQpOworfQorCitzdGF0aWMgYm9vbAorZHNt X2ltcGxfc3lzdl9hdHRhY2goZHNtX2ltcGxfaGFuZGxlIGhhbmRsZSwKKwkJCQkJIGRzbV9p bXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLCBTaXpl ICptYXBwZWRfc2l6ZSwKKwkJCQkJIGludCBlbGV2ZWwpCit7CisJaW50CQkJaWRlbnQgPSBz aG1pZF9mcm9tX2hhbmRsZShoYW5kbGUpOworCWNoYXIJICAgKmFkZHJlc3M7CisJY2hhcgkJ bmFtZVs2NF07CisJc3RydWN0IHNobWlkX2RzIHNobTsKKwlTaXplCQlzaXplOworCisJLyoK KwkgKiBQT1NJWCBzaGFyZWQgbWVtb3J5IGFuZCBtbWFwLWJhc2VkIHNoYXJlZCBtZW1vcnkg aWRlbnRpZnkgc2VnbWVudHMgd2l0aAorCSAqIG5hbWVzLiAgVG8gYXZvaWQgbmVlZGxlc3Mg ZXJyb3IgbWVzc2FnZSB2YXJpYXRpb24sIHdlIHVzZSB0aGUgc2htaWQgYXMKKwkgKiB0aGUg bmFtZS4KKwkgKi8KKwlzbnByaW50ZihuYW1lLCA2NCwgInNobWlkICVkIiwgaWRlbnQpOwor CisJLyogVXNlIElQQ19TVEFUIHRvIGRldGVybWluZSB0aGUgc2l6ZS4gKi8KKwlpZiAoc2ht Y3RsKGlkZW50LCBJUENfU1RBVCwgJnNobSkgIT0gMCkKKwl7CisJCWVyZXBvcnQoZWxldmVs LAorCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJy bXNnKCJjb3VsZCBub3Qgc3RhdCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIs CisJCQkJCQluYW1lKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXNpemUgPSBzaG0uc2ht X3NlZ3N6OworCisJLyogTWFwIGl0IHRvIHRoaXMgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2Uu ICovCisJYWRkcmVzcyA9IHNobWF0KGlkZW50LCBOVUxMLCBQR19TSE1BVF9GTEFHUyk7CisJ aWYgKGFkZHJlc3MgPT0gKHZvaWQgKikgLTEpCisJeworCQllcmVwb3J0KGVsZXZlbCwKKwkJ CQkoZXJyY29kZV9mb3JfZHluYW1pY19zaGFyZWRfbWVtb3J5KCksCisJCQkJIGVycm1zZygi Y291bGQgbm90IG1hcCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIsCisJCQkJ CQluYW1lKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCSptYXBwZWRfYWRkcmVzcyA9IGFk ZHJlc3M7CisJKm1hcHBlZF9zaXplID0gc2l6ZTsKKwkqaW1wbF9wcml2YXRlID0gMDsJCQkv KiBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uICovCisKKwlyZXR1cm4gdHJ1ZTsK K30KKworCitzdGF0aWMgYm9vbAorZHNtX2ltcGxfc3lzdl9kZXRhY2goZHNtX2ltcGxfaGFu ZGxlIGhhbmRsZSwKKwkJCQkJIGRzbV9pbXBsX3ByaXZhdGUgaW1wbF9wcml2YXRlLCB2b2lk ICptYXBwZWRfYWRkcmVzcywgU2l6ZSBtYXBwZWRfc2l6ZSwKKwkJCQkJIGludCBlbGV2ZWwp Cit7CisJaW50CQkJaWRlbnQgPSBzaG1pZF9mcm9tX2hhbmRsZShoYW5kbGUpOworCWNoYXIJ CW5hbWVbNjRdOworCisJQXNzZXJ0KG1hcHBlZF9hZGRyZXNzICE9IE5VTEwpOworCUFzc2Vy dChpbXBsX3ByaXZhdGUgPT0gMCk7CS8qIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRp b24gKi8KKworCS8qCisJICogUE9TSVggc2hhcmVkIG1lbW9yeSBhbmQgbW1hcC1iYXNlZCBz aGFyZWQgbWVtb3J5IGlkZW50aWZ5IHNlZ21lbnRzIHdpdGgKKwkgKiBuYW1lcy4gIFRvIGF2 b2lkIG5lZWRsZXNzIGVycm9yIG1lc3NhZ2UgdmFyaWF0aW9uLCB3ZSB1c2UgdGhlIHNobWlk IGFzCisJICogdGhlIG5hbWUuCisJICovCisJc25wcmludGYobmFtZSwgNjQsICJzaG1pZCAl ZCIsIGlkZW50KTsKKworCWlmIChzaG1kdChtYXBwZWRfYWRkcmVzcykgIT0gMCkKKwl7CisJ CWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1v cnkoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgdW5tYXAgc2hhcmVkIG1lbW9yeSBzZWdt ZW50IFwiJXNcIjogJW0iLAorCQkJCQkJbmFtZSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK2RzbV9pbXBsX3N5c3ZfZGVzdHJv eShkc21faW1wbF9oYW5kbGUgaGFuZGxlLCBpbnQgZWxldmVsKQoreworCWludAkJCWlkZW50 ID0gc2htaWRfZnJvbV9oYW5kbGUoaGFuZGxlKTsKKwljaGFyCQluYW1lWzY0XTsKKworCS8q CisJICogUE9TSVggc2hhcmVkIG1lbW9yeSBhbmQgbW1hcC1iYXNlZCBzaGFyZWQgbWVtb3J5 IGlkZW50aWZ5IHNlZ21lbnRzIHdpdGgKKwkgKiBuYW1lcy4gIFRvIGF2b2lkIG5lZWRsZXNz IGVycm9yIG1lc3NhZ2UgdmFyaWF0aW9uLCB3ZSB1c2UgdGhlIHNobWlkIGFzCisJICogdGhl IG5hbWUuCisJICovCisJc25wcmludGYobmFtZSwgNjQsICJzaG1pZCAlZCIsIGlkZW50KTsK KworCS8qIEhhbmRsZSB0ZWFyZG93biBjYXNlcy4gKi8KKwlpZiAoc2htY3RsKGlkZW50LCBJ UENfUk1JRCwgTlVMTCkgPCAwKQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNv ZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAorCQkJCSBlcnJtc2coImNvdWxkIG5v dCByZW1vdmUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAorCQkJCQkJbmFt ZSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworY29uc3Qg ZHNtX2ltcGxfb3BzIGRzbV9pbXBsX3N5c3Zfb3BzID0geworCS5jcmVhdGUgPSBkc21faW1w bF9zeXN2X2NyZWF0ZSwKKwkuYXR0YWNoID0gZHNtX2ltcGxfc3lzdl9hdHRhY2gsCisJLmRl dGFjaCA9IGRzbV9pbXBsX3N5c3ZfZGV0YWNoLAorCS5kZXN0cm95ID0gZHNtX2ltcGxfc3lz dl9kZXN0cm95LAorCS5waW5fc2VnbWVudCA9IGRzbV9pbXBsX25vb3BfcGluX3NlZ21lbnQs CisJLnVucGluX3NlZ21lbnQgPSBkc21faW1wbF9ub29wX3VucGluX3NlZ21lbnQsCit9Owor CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBs X3dpbmRvd3MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsX3dpbmRvd3Mu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjRiNjJmOTJjMzUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbF93 aW5kb3dzLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIGRzbV9pbXBsX3dpbmRvd3MuYworICoJICBPcGVyYXRpbmcgc3lzdGVtIHByaW1pdGl2 ZXMgdG8gc3VwcG9ydCBXaW5kb3dzIHNoYXJlZCBtZW1vcnkuCisgKgorICogV2luZG93cyBz aGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uIGlzIGRvbmUgdXNpbmcgZmlsZSBtYXBwaW5n CisgKiB3aGljaCBjYW4gYmUgYmFja2VkIGJ5IGVpdGhlciBwaHlzaWNhbCBmaWxlIG9yIHN5 c3RlbSBwYWdpbmcgZmlsZS4KKyAqIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gdXNlcyBzeXN0 ZW0gcGFnaW5nIGZpbGUgYXMgb3RoZXIgZWZmZWN0cworICogbGlrZSBwZXJmb3JtYW5jZSBh cmUgbm90IGNsZWFyIGZvciBwaHlzaWNhbCBmaWxlIGFuZCBpdCBpcyB1c2VkIGluCisgKiBz aW1pbGFyIHdheSBmb3IgbWFpbiBzaGFyZWQgbWVtb3J5IGluIHdpbmRvd3MuCisgKgorICog QSBtZW1vcnkgbWFwcGluZyBvYmplY3QgaXMgYSBrZXJuZWwgb2JqZWN0IC0gdGhleSBhbHdh eXMgZ2V0IGRlbGV0ZWQKKyAqIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZW0gZ29l cyBhd2F5LCBlaXRoZXIgZXhwbGljaXRseSB2aWEgYQorICogQ2xvc2VIYW5kbGUgb3Igd2hl biB0aGUgcHJvY2VzcyBjb250YWluaW5nIHRoZSByZWZlcmVuY2UgZXhpdHMuCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2Vu dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElG SUNBVElPTgorICoJICBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbF93aW5kb3dz LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9u L3BnX3BybmcuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJwZ3N0YXQu aCIKKyNpbmNsdWRlICJwb3J0YWJpbGl0eS9tZW0uaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVy L3Bvc3RtYXN0ZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9pbXBsLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9mZC5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorCisjZGVmaW5lIFNF R01FTlRfTkFNRV9QUkVGSVgJCQkiR2xvYmFsL1Bvc3RncmVTUUwiCisKK3N0YXRpYyBkc21f aW1wbF9oYW5kbGUKK2RzbV9pbXBsX3dpbmRvd3NfY3JlYXRlKFNpemUgcmVxdWVzdF9zaXpl LAorCQkJCQkJZHNtX2ltcGxfcHJpdmF0ZSAqaW1wbF9wcml2YXRlLCB2b2lkICoqbWFwcGVk X2FkZHJlc3MsCisJCQkJCQlpbnQgZWxldmVsKQoreworCWNoYXIJICAgKmFkZHJlc3M7CisJ SEFORExFCQlobWFwOworCWNoYXIJCW5hbWVbNjRdOworCURXT1JECQlzaXplX2hpZ2g7CisJ RFdPUkQJCXNpemVfbG93OworCURXT1JECQllcnJjb2RlOworCWRzbV9pbXBsX2hhbmRsZSBo YW5kbGU7CisKKwkvKiBTaGlmdHMgPj0gdGhlIHdpZHRoIG9mIHRoZSB0eXBlIGFyZSB1bmRl ZmluZWQuICovCisjaWZkZWYgX1dJTjY0CisJc2l6ZV9oaWdoID0gcmVxdWVzdF9zaXplID4+ IDMyOworI2Vsc2UKKwlzaXplX2hpZ2ggPSAwOworI2VuZGlmCisJc2l6ZV9sb3cgPSAoRFdP UkQpIHJlcXVlc3Rfc2l6ZTsKKworCS8qCisJICogQ3JlYXRlIG5ldyBzZWdtZW50LCB3aXRo IGEgcmFuZG9tIG5hbWUuICBJZiB0aGUgbmFtZSBpcyBhbHJlYWR5IGluIHVzZSwKKwkgKiBy ZXRyeSB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lLgorCSAqLworCWZvciAoOzspCisJ eworCQlkbworCQl7CisJCQloYW5kbGUgPSBwZ19wcm5nX3VpbnQzMigmcGdfZ2xvYmFsX3By bmdfc3RhdGUpOworCQl9IHdoaWxlIChoYW5kbGUgPT0gRFNNX0lNUExfSEFORExFX0lOVkFM SUQpOworCisJCS8qCisJCSAqIFN0b3JpbmcgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBp biB0aGUgR2xvYmFsXCBuYW1lc3BhY2UgY2FuCisJCSAqIGFsbG93IGFueSBwcm9jZXNzIHJ1 bm5pbmcgaW4gYW55IHNlc3Npb24gdG8gYWNjZXNzIHRoYXQgZmlsZQorCQkgKiBtYXBwaW5n IG9iamVjdCBwcm92aWRlZCB0aGF0IHRoZSBjYWxsZXIgaGFzIHRoZSByZXF1aXJlZCBhY2Nl c3MKKwkJICogcmlnaHRzLiAgQnV0IHRvIGF2b2lkIGlzc3VlcyBmYWNlZCBpbiBtYWluIHNo YXJlZCBtZW1vcnksIHdlIGFyZQorCQkgKiB1c2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24g c2ltaWxhciB0byBtYWluIHNoYXJlZCBtZW1vcnkuICBXZSBjYW4KKwkJICogY2hhbmdlIGhl cmUgb25jZSBpc3N1ZSBtZW50aW9uZWQgaW4gR2V0U2hhcmVkTWVtTmFtZSBpcyByZXNvbHZl ZC4KKwkJICovCisJCXNucHJpbnRmKG5hbWUsIDY0LCAiJXMuJXUiLCBTRUdNRU5UX05BTUVf UFJFRklYLCBoYW5kbGUpOworCisJCS8qIENyZWF0ZUZpbGVNYXBwaW5nIG1pZ2h0IG5vdCBj bGVhciB0aGUgZXJyb3IgY29kZSBvbiBzdWNjZXNzICovCisJCVNldExhc3RFcnJvcigwKTsK KworCQlobWFwID0gQ3JlYXRlRmlsZU1hcHBpbmcoSU5WQUxJRF9IQU5ETEVfVkFMVUUsCS8q IFVzZSB0aGUgcGFnZWZpbGUgKi8KKwkJCQkJCQkJIE5VTEwsCS8qIERlZmF1bHQgc2VjdXJp dHkgYXR0cnMgKi8KKwkJCQkJCQkJIFBBR0VfUkVBRFdSSVRFLAkvKiBNZW1vcnkgaXMgcmVh ZC93cml0ZSAqLworCQkJCQkJCQkgc2l6ZV9oaWdoLCAvKiBVcHBlciAzMiBiaXRzIG9mIHNp emUgKi8KKwkJCQkJCQkJIHNpemVfbG93LAkvKiBMb3dlciAzMiBiaXRzIG9mIHNpemUgKi8K KwkJCQkJCQkJIG5hbWUpOworCisJCWVycmNvZGUgPSBHZXRMYXN0RXJyb3IoKTsKKwkJaWYg KGVycmNvZGUgPT0gRVJST1JfQUxSRUFEWV9FWElTVFMgfHwgZXJyY29kZSA9PSBFUlJPUl9B Q0NFU1NfREVOSUVEKQorCQl7CisJCQkvKgorCQkJICogT24gV2luZG93cywgd2hlbiB0aGUg c2VnbWVudCBhbHJlYWR5IGV4aXN0cywgYSBoYW5kbGUgZm9yIHRoZQorCQkJICogZXhpc3Rp bmcgc2VnbWVudCBpcyByZXR1cm5lZC4gIFdlIG11c3QgY2xvc2UgaXQgYmVmb3JlCisJCQkg KiByZXRyeWluZy4gIEhvd2V2ZXIsIGlmIHRoZSBleGlzdGluZyBzZWdtZW50IGlzIGNyZWF0 ZWQgYnkgYQorCQkJICogc2VydmljZSwgdGhlbiBpdCByZXR1cm5zIEVSUk9SX0FDQ0VTU19E RU5JRUQuIFdlIGRvbid0IGRvCisJCQkgKiBfZG9zbWFwZXJyIGhlcmUsIHNvIGVycm5vIHdv bid0IGJlIG1vZGlmaWVkLgorCQkJICovCisJCQlpZiAoaG1hcCkKKwkJCQlDbG9zZUhhbmRs ZShobWFwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKworCWlmICghaG1h cCkKKwl7CisJCV9kb3NtYXBlcnIoZXJyY29kZSk7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJ CShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJybXNnKCJj b3VsZCBub3QgY3JlYXRlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKKwkJ CQkJCW5hbWUpKSk7CisJCXJldHVybiBEU01fSU1QTF9IQU5ETEVfSU5WQUxJRDsKKwl9CisK KwkvKiBNYXAgaXQuICovCisJYWRkcmVzcyA9IE1hcFZpZXdPZkZpbGUoaG1hcCwgRklMRV9N QVBfV1JJVEUgfCBGSUxFX01BUF9SRUFELAorCQkJCQkJCTAsIDAsIDApOworCWlmICghYWRk cmVzcykKKwl7CisJCWludAkJCXNhdmVfZXJybm87CisKKwkJX2Rvc21hcGVycihHZXRMYXN0 RXJyb3IoKSk7CisJCS8qIEJhY2sgb3V0IHdoYXQncyBhbHJlYWR5IGJlZW4gZG9uZS4gKi8K KwkJc2F2ZV9lcnJubyA9IGVycm5vOworCQlDbG9zZUhhbmRsZShobWFwKTsKKwkJZXJybm8g PSBzYXZlX2Vycm5vOworCisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlX2Zvcl9k eW5hbWljX3NoYXJlZF9tZW1vcnkoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgbWFwIHNo YXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJl dHVybiBEU01fSU1QTF9IQU5ETEVfSU5WQUxJRDsKKwl9CisKKwkqbWFwcGVkX2FkZHJlc3Mg PSBhZGRyZXNzOworCSppbXBsX3ByaXZhdGUgPSAodWludHB0cl90KSBobWFwOworCisJcmV0 dXJuIGhhbmRsZTsKK30KKworc3RhdGljIGJvb2wKK2RzbV9pbXBsX3dpbmRvd3NfYXR0YWNo KGRzbV9pbXBsX2hhbmRsZSBoYW5kbGUsCisJCQkJCQlkc21faW1wbF9wcml2YXRlICppbXBs X3ByaXZhdGUsIHZvaWQgKiptYXBwZWRfYWRkcmVzcywKKwkJCQkJCVNpemUgKm1hcHBlZF9z aXplLCBpbnQgZWxldmVsKQoreworCWNoYXIJICAgKmFkZHJlc3M7CisJSEFORExFCQlobWFw OworCWNoYXIJCW5hbWVbNjRdOworCU1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBpbmZvOwor CisJc25wcmludGYobmFtZSwgNjQsICIlcy4ldSIsIFNFR01FTlRfTkFNRV9QUkVGSVgsIGhh bmRsZSk7CisKKwkvKiBPcGVuIHRoZSBleGlzdGluZyBtYXBwaW5nIG9iamVjdC4gKi8KKwlo bWFwID0gT3BlbkZpbGVNYXBwaW5nKEZJTEVfTUFQX1dSSVRFIHwgRklMRV9NQVBfUkVBRCwK KwkJCQkJCSAgIEZBTFNFLAkvKiBkbyBub3QgaW5oZXJpdCB0aGUgbmFtZSAqLworCQkJCQkJ ICAgbmFtZSk7CS8qIG5hbWUgb2YgbWFwcGluZyBvYmplY3QgKi8KKwlpZiAoIWhtYXApCisJ eworCQlfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJZXJlcG9ydChlbGV2ZWwsCisJ CQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAorCQkJCSBlcnJtc2co ImNvdWxkIG5vdCBvcGVuIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKKwkJ CQkJCW5hbWUpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBNYXAgaXQgdG8gdGhp cyBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS4gKi8KKwlhZGRyZXNzID0gTWFwVmlld09mRmls ZShobWFwLCBGSUxFX01BUF9XUklURSB8IEZJTEVfTUFQX1JFQUQsCisJCQkJCQkJMCwgMCwg MCk7CisJaWYgKCFhZGRyZXNzKQorCXsKKwkJaW50CQkJc2F2ZV9lcnJubzsKKworCQlfZG9z bWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJLyogQmFjayBvdXQgd2hhdCdzIGFscmVhZHkg YmVlbiBkb25lLiAqLworCQlzYXZlX2Vycm5vID0gZXJybm87CisJCUNsb3NlSGFuZGxlKGht YXApOworCQllcnJubyA9IHNhdmVfZXJybm87CisKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJ KGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAorCQkJCSBlcnJtc2coImNv dWxkIG5vdCBtYXAgc2hhcmVkIG1lbW9yeSBzZWdtZW50IFwiJXNcIjogJW0iLAorCQkJCQkJ bmFtZSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogRGV0ZXJtaW5lIHRo ZSBzaXplIG9mIHRoZSBtYXBwaW5nLgorCSAqCisJICogTm90ZTogV2luZG93cyByb3VuZHMg dXAgdGhlIG1hcHBpbmcgc2l6ZSB0byB0aGUgNEsgcGFnZSBzaXplLCBzbyB0aGlzCisJICog Y2FuIGJlIGxhcmdlciB0aGFuIHdoYXQgd2FzIHJlcXVlc3RlZCB3aGVuIHRoZSBzZWdtZW50 IHdhcyBjcmVhdGVkLgorCSAqLworCWlmIChWaXJ0dWFsUXVlcnkoYWRkcmVzcywgJmluZm8s IHNpemVvZihpbmZvKSkgPT0gMCkKKwl7CisJCWludAkJCXNhdmVfZXJybm87CisKKwkJX2Rv c21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCS8qIEJhY2sgb3V0IHdoYXQncyBhbHJlYWR5 IGJlZW4gZG9uZS4gKi8KKwkJc2F2ZV9lcnJubyA9IGVycm5vOworCQlVbm1hcFZpZXdPZkZp bGUoYWRkcmVzcyk7CisJCUNsb3NlSGFuZGxlKGhtYXApOworCQllcnJubyA9IHNhdmVfZXJy bm87CisKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hh cmVkX21lbW9yeSgpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0IHNoYXJlZCBtZW1v cnkgc2VnbWVudCBcIiVzXCI6ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwkqbWFwcGVkX2FkZHJlc3MgPSBhZGRyZXNzOworCSptYXBwZWRfc2l6ZSA9 IGluZm8uUmVnaW9uU2l6ZTsKKwkqaW1wbF9wcml2YXRlID0gKHVpbnRwdHJfdCkgaG1hcDsK KworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorZHNtX2ltcGxfd2luZG93c19k ZXRhY2goZHNtX2ltcGxfaGFuZGxlIGhhbmRsZSwKKwkJCQkJCWRzbV9pbXBsX3ByaXZhdGUg aW1wbF9wcml2YXRlLCB2b2lkICptYXBwZWRfYWRkcmVzcywKKwkJCQkJCVNpemUgbWFwcGVk X3NpemUsIGludCBlbGV2ZWwpCit7CisJSEFORExFCQlobWFwOworCWNoYXIJCW5hbWVbNjRd OworCisJQXNzZXJ0KG1hcHBlZF9hZGRyZXNzICE9IE5VTEwpOworCWhtYXAgPSAoSEFORExF KSBpbXBsX3ByaXZhdGU7CisKKwlzbnByaW50ZihuYW1lLCA2NCwgIiVzLiV1IiwgU0VHTUVO VF9OQU1FX1BSRUZJWCwgaGFuZGxlKTsKKworCS8qCisJICogSGFuZGxlIHRlYXJkb3duIGNh c2VzLgorCSAqLworCWlmIChVbm1hcFZpZXdPZkZpbGUobWFwcGVkX2FkZHJlc3MpID09IDAp CisJeworCQlfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJZXJlcG9ydChlbGV2ZWws CisJCQkJKGVycmNvZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSgpLAorCQkJCSBlcnJt c2coImNvdWxkIG5vdCB1bm1hcCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgXCIlc1wiOiAlbSIs CisJCQkJCQluYW1lKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChDbG9zZUhhbmRs ZShobWFwKSA9PSAwKQorCXsKKwkJX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCWVy ZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlX2Zvcl9keW5hbWljX3NoYXJlZF9tZW1vcnko KSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVtb3ZlIHNoYXJlZCBtZW1vcnkgc2VnbWVu dCBcIiVzXCI6ICVtIiwKKwkJCQkJCW5hbWUpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFNpbmNlIFdpbmRvd3MgYXV0b21hdGljYWxs eSBkZXN0cm95cyB0aGUgb2JqZWN0IHdoZW4gbm8gcmVmZXJlbmNlcyByZW1haW4sCisgKiB0 aGlzIGlzIGEgbm8tb3AuCisgKi8KK3N0YXRpYyBib29sCitkc21faW1wbF93aW5kb3dzX2Rl c3Ryb3koZHNtX2ltcGxfaGFuZGxlIGhhbmRsZSwgaW50IGVsZXZlbCkKK3sKKwlyZXR1cm4g dHJ1ZTsKK30KKworLyoKKyAqIFdpbmRvd3MgY2xlYW5zIHVwIHNlZ21lbnRzIGF1dG9tYXRp Y2FsbHkgd2hlbiBubyByZWZlcmVuY2VzIHJlbWFpbi4gVGhhdCdzCisgKiBoYW5keSwgYnV0 IGlmIGEgc2VnbWVudCBuZWVkcyB0byBiZSBwcmVzZXJ2ZWQgZXZlbiB3aGVuIG5vIGJhY2tl bmQgaGFzIGl0CisgKiBhdHRhY2hlZCwgd2UgbmVlZCB0byB0YWtlIG1lYXN1cmVzIHRvIHBy ZXZlbnQgaXQgZnJvbSBiZWluZyBjbGVhbmVkIHVwLiAgVG8KKyAqIHByZXZlbnQgaXQsIHdl IGR1cGxpY2F0ZSB0aGUgc2VnbWVudCBoYW5kbGUgaW50byB0aGUgcG9zdG1hc3RlciBwcm9j ZXNzLgorICogVGhlIHBvc3RtYXN0ZXIgbmVlZG4ndCBkbyBhbnl0aGluZyB0byByZWNlaXZl IHRoZSBoYW5kbGU7IFdpbmRvd3MgdHJhbnNmZXJzCisgKiBpdCBhdXRvbWF0aWNhbGx5Lgor ICovCitzdGF0aWMgdm9pZAorZHNtX2ltcGxfd2luZG93c19waW5fc2VnbWVudChkc21faW1w bF9oYW5kbGUgaGFuZGxlLCBkc21faW1wbF9wcml2YXRlIGltcGxfcHJpdmF0ZSwKKwkJCQkJ CQkgZHNtX2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgKnBtX2hhbmRsZSkKK3sKKwlpZiAoSXNV bmRlclBvc3RtYXN0ZXIpCisJeworCQlIQU5ETEUJCWhtYXAgPSAoSEFORExFKSBpbXBsX3By aXZhdGU7CisJCUhBTkRMRQkJcG1faG1hcDsKKworCQlpZiAoIUR1cGxpY2F0ZUhhbmRsZShH ZXRDdXJyZW50UHJvY2VzcygpLCBobWFwLAorCQkJCQkJCSBQb3N0bWFzdGVySGFuZGxlLCAm cG1faG1hcCwgMCwgRkFMU0UsCisJCQkJCQkJIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisJ CXsKKwkJCWNoYXIJCW5hbWVbNjRdOworCisJCQlzbnByaW50ZihuYW1lLCA2NCwgIiVzLiV1 IiwgU0VHTUVOVF9OQU1FX1BSRUZJWCwgaGFuZGxlKTsKKwkJCV9kb3NtYXBlcnIoR2V0TGFz dEVycm9yKCkpOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGVfZm9yX2R5bmFt aWNfc2hhcmVkX21lbW9yeSgpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZHVwbGljYXRl IGhhbmRsZSBmb3IgXCIlc1wiOiAlbSIsCisJCQkJCQkJbmFtZSkpKTsKKwkJfQorCisJCS8q CisJCSAqIEhlcmUsIHdlIHJlbWVtYmVyIHRoZSBoYW5kbGUgdGhhdCB3ZSBjcmVhdGVkIGlu IHRoZSBwb3N0bWFzdGVyCisJCSAqIHByb2Nlc3MuICBUaGlzIGhhbmRsZSBpc24ndCBhY3R1 YWxseSB1c2FibGUgaW4gYW55IHByb2Nlc3Mgb3RoZXIKKwkJICogdGhhbiB0aGUgcG9zdG1h c3RlciwgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuICBXZSdyZSBqdXN0IGhvbGRpbmcKKwkJ ICogb250byBpdCBzbyB0aGF0LCBpZiB0aGUgc2VnbWVudCBpcyB1bnBpbm5lZCwgZHNtX3Vu cGluX3NlZ21lbnQgY2FuCisJCSAqIGNsb3NlIGl0LgorCQkgKi8KKwkJKnBtX2hhbmRsZSA9 ICh1aW50cHRyX3QpIHBtX2htYXA7CisJfQorfQorCisvKgorICogQ2xvc2UgdGhlIGV4dHJh IGhhbmRsZSB0aGF0IHBpbl9zZWdtZW50IGNyZWF0ZWQgaW4gdGhlIHBvc3RtYXN0ZXIncyBw cm9jZXNzCisgKiBzcGFjZS4KKyAqLworc3RhdGljIHZvaWQKK2RzbV9pbXBsX3dpbmRvd3Nf dW5waW5fc2VnbWVudChkc21faW1wbF9oYW5kbGUgaGFuZGxlLCBkc21faW1wbF9wcml2YXRl X3BtX2hhbmRsZSBwbV9oYW5kbGUpCit7CisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCXsK KwkJSEFORExFCQlwbV9obWFwID0gKEhBTkRMRSkgcG1faGFuZGxlOworCisJCWlmICghRHVw bGljYXRlSGFuZGxlKFBvc3RtYXN0ZXJIYW5kbGUsIHBtX2htYXAsCisJCQkJCQkJIE5VTEws IE5VTEwsIDAsIEZBTFNFLAorCQkJCQkJCSBEVVBMSUNBVEVfQ0xPU0VfU09VUkNFKSkKKwkJ eworCQkJY2hhcgkJbmFtZVs2NF07CisKKwkJCXNucHJpbnRmKG5hbWUsIDY0LCAiJXMuJXUi LCBTRUdNRU5UX05BTUVfUFJFRklYLCBoYW5kbGUpOworCQkJX2Rvc21hcGVycihHZXRMYXN0 RXJyb3IoKSk7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZV9mb3JfZHluYW1p Y19zaGFyZWRfbWVtb3J5KCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBkdXBsaWNhdGUg aGFuZGxlIGZvciBcIiVzXCI6ICVtIiwKKwkJCQkJCQluYW1lKSkpOworCQl9CisJfQorfQor Citjb25zdCBkc21faW1wbF9vcHMgZHNtX2ltcGxfd2luZG93c19vcHMgPSB7CisJLmNyZWF0 ZSA9IGRzbV9pbXBsX3dpbmRvd3NfY3JlYXRlLAorCS5hdHRhY2ggPSBkc21faW1wbF93aW5k b3dzX2F0dGFjaCwKKwkuZGV0YWNoID0gZHNtX2ltcGxfd2luZG93c19kZXRhY2gsCisJLmRl c3Ryb3kgPSBkc21faW1wbF93aW5kb3dzX2Rlc3Ryb3ksCisJLnBpbl9zZWdtZW50ID0gZHNt X2ltcGxfd2luZG93c19waW5fc2VnbWVudCwKKwkudW5waW5fc2VnbWVudCA9IGRzbV9pbXBs X3dpbmRvd3NfdW5waW5fc2VnbWVudCwKK307CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL21lc29u LmJ1aWxkCmluZGV4IDVhOTM2MTcxZjczLi41YWNlYTVhZjI1MCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvbWVzb24uYnVpbGQKQEAgLTIwLDMgKzIwLDE1IEBAIGJhY2tlbmRfc291cmNl cyArPSBmaWxlcygKICAgJ3N0YW5kYnkuYycsCiAKICkKKworaWYgaG9zdF9zeXN0ZW0gPT0g J3dpbmRvd3MnCisgIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKKyAgICAnZHNtX2ltcGxf d2luZG93cy5jJywKKyAgKQorZWxzZQorICBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCisg ICAgJ2RzbV9pbXBsX3Bvc2l4LmMnLAorICAgICdkc21faW1wbF9zeXN2LmMnLAorICAgICdk c21faW1wbF9tbWFwLmMnLAorICApCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190 YWJsZXMuYwppbmRleCA3MDY1MmYwYTNmYy4uMWQ4MDliYTJjMjkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC00ODg1LDcgKzQ4ODUsNyBAQCBzdHJ1Y3QgY29u ZmlnX2VudW0gQ29uZmlndXJlTmFtZXNFbnVtW10gPQogCQl9LAogCQkmZHluYW1pY19zaGFy ZWRfbWVtb3J5X3R5cGUsCiAJCURFRkFVTFRfRFlOQU1JQ19TSEFSRURfTUVNT1JZX1RZUEUs IGR5bmFtaWNfc2hhcmVkX21lbW9yeV9vcHRpb25zLAotCQlOVUxMLCBOVUxMLCBOVUxMCisJ CU5VTEwsIGFzc2lnbl9keW5hbWljX3NoYXJlZF9tZW1vcnlfdHlwZSwgTlVMTAogCX0sCiAK IAl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbS5oIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9kc20uaAppbmRleCAzNWFlNGViMTY0ZS4uNWQ0NjM2MWU0YTAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtLmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9kc20uaApAQCAtMTcsMTEgKzE3LDE5IEBACiAKIHR5cGVkZWYgc3RydWN0IGRzbV9z ZWdtZW50IGRzbV9zZWdtZW50OwogCisvKgorICogTm90ZSwgbXVzdCBiZSBtZWFuaW5nZnVs IGV2ZW4gYWNyb3NzIHJlc3RhcnRzCisgKi8KK3R5cGVkZWYgdWludDMyIGRzbV9oYW5kbGU7 CisKKy8qIFNlbnRpbmVsIHZhbHVlIHRvIHVzZSBmb3IgaW52YWxpZCBEU00gaGFuZGxlcy4g Ki8KKyNkZWZpbmUgRFNNX0hBTkRMRV9JTlZBTElEIDAKKwogI2RlZmluZSBEU01fQ1JFQVRF X05VTExfSUZfTUFYU0VHTUVOVFMJCQkweDAwMDEKIAogLyogU3RhcnR1cCBhbmQgc2h1dGRv d24gZnVuY3Rpb25zLiAqLwogc3RydWN0IFBHU2htZW1IZWFkZXI7CQkJLyogYXZvaWQgaW5j bHVkaW5nIHBnX3NobWVtLmggKi8KLWV4dGVybiB2b2lkIGRzbV9jbGVhbnVwX3VzaW5nX2Nv bnRyb2xfc2VnbWVudChkc21faGFuZGxlIG9sZF9jb250cm9sX2hhbmRsZSk7CitleHRlcm4g dm9pZCBkc21fY2xlYW51cF91c2luZ19jb250cm9sX3NlZ21lbnQoZHNtX2ltcGxfaGFuZGxl IG9sZF9jb250cm9sX2hhbmRsZSk7CiBleHRlcm4gdm9pZCBkc21fcG9zdG1hc3Rlcl9zdGFy dHVwKHN0cnVjdCBQR1NobWVtSGVhZGVyICopOwogZXh0ZXJuIHZvaWQgZHNtX2JhY2tlbmRf c2h1dGRvd24odm9pZCk7CiBleHRlcm4gdm9pZCBkc21fZGV0YWNoX2FsbCh2b2lkKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtX2ltcGwuaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvZHNtX2ltcGwuaAppbmRleCBmMmJmYjJhMWE1Yy4uMGYzNTE3NzY3NzMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtX2ltcGwuaAorKysgYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2RzbV9pbXBsLmgKQEAgLTEzLDYgKzEzLDEwIEBACiAjaWZuZGVmIERT TV9JTVBMX0gKICNkZWZpbmUgRFNNX0lNUExfSAogCit0eXBlZGVmIHVpbnQzMiBkc21faW1w bF9oYW5kbGU7CisKKyNkZWZpbmUgRFNNX0lNUExfSEFORExFX0lOVkFMSUQgMAorCiAvKiBE eW5hbWljIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb25zLiAqLwogI2RlZmluZSBEU01f SU1QTF9QT1NJWAkJCTEKICNkZWZpbmUgRFNNX0lNUExfU1lTVgkJCTIKQEAgLTUxLDI1ICs1 NSwxMSBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IG1pbl9keW5hbWljX3NoYXJlZF9tZW1v cnk7CiAjZGVmaW5lIFBHX0RZTlNITUVNX0RJUgkJCQkJInBnX2R5bnNobWVtIgogI2RlZmlu ZSBQR19EWU5TSE1FTV9NTUFQX0ZJTEVfUFJFRklYCSJtbWFwLiIKIAotLyogQSAibmFtZSIg Zm9yIGEgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuICovCi10eXBlZGVmIHVpbnQz MiBkc21faGFuZGxlOwotCi0vKiBTZW50aW5lbCB2YWx1ZSB0byB1c2UgZm9yIGludmFsaWQg RFNNIGhhbmRsZXMuICovCi0jZGVmaW5lIERTTV9IQU5ETEVfSU5WQUxJRCAoKGRzbV9oYW5k bGUpIDApCi0KLS8qIEFsbCB0aGUgc2hhcmVkLW1lbW9yeSBvcGVyYXRpb25zIHdlIGtub3cg YWJvdXQuICovCi10eXBlZGVmIGVudW0KLXsKLQlEU01fT1BfQ1JFQVRFLAotCURTTV9PUF9B VFRBQ0gsCi0JRFNNX09QX0RFVEFDSCwKLQlEU01fT1BfREVTVFJPWSwKLX0gZHNtX29wOwot CiAvKgogICogV2hlbiBhIHNlZ21lbnQgaXMgY3JlYXRlZCBvciBhdHRhY2hlZCwgdGhlIGNh bGxlciBwcm92aWRlcyB0aGlzIHNwYWNlIHRvCi0gKiBob2xkIGltcGxlbWVudGF0aW9uLXNw ZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhdHRhY2htZW50LiBJdCBpcyBvcGFxdWUK LSAqIHRvIHRoZSBjYWxsZXIsIGFuZCBpcyBwYXNzZWQgYmFjayB0byB0aGUgaW1wbGVtZW50 YXRpb24gd2hlbiBkZXRhY2hpbmcuCisgKiBob2xkIGltcGxlbWVudGF0aW9uLXNwZWNpZmlj IGluZm9ybWF0aW9uIGFib3V0IHRoZSBhdHRhY2htZW50LiAgSXQgaXMKKyAqIG9wYXF1ZSB0 byB0aGUgY2FsbGVyLCBhbmQgaXMgcGFzc2VkIGJhY2sgdG8gdGhlIGltcGxlbWVudGF0aW9u IHdoZW4KKyAqIGRldGFjaGluZy4KICAqLwogdHlwZWRlZiB1aW50cHRyX3QgZHNtX2ltcGxf cHJpdmF0ZTsKIApAQCAtNzksMTQgKzY5LDczIEBAIHR5cGVkZWYgdWludHB0cl90IGRzbV9p bXBsX3ByaXZhdGU7CiAgKi8KIHR5cGVkZWYgdWludHB0cl90IGRzbV9pbXBsX3ByaXZhdGVf cG1faGFuZGxlOwogCi0vKiBDcmVhdGUsIGF0dGFjaCB0bywgZGV0YWNoIGZyb20sIHJlc2l6 ZSwgb3IgZGVzdHJveSBhIHNlZ21lbnQuICovCi1leHRlcm4gYm9vbCBkc21faW1wbF9vcChk c21fb3Agb3AsIGRzbV9oYW5kbGUgaGFuZGxlLCBTaXplIHJlcXVlc3Rfc2l6ZSwKLQkJCQkJ CWRzbV9pbXBsX3ByaXZhdGUgKmltcGxfcHJpdmF0ZSwgdm9pZCAqKm1hcHBlZF9hZGRyZXNz LCBTaXplICptYXBwZWRfc2l6ZSwKLQkJCQkJCWludCBlbGV2ZWwpOworLyogQWxsIHRoZSBz aGFyZWQtbWVtb3J5IG9wZXJhdGlvbnMgd2Uga25vdyBhYm91dC4gKi8KK3R5cGVkZWYgc3Ry dWN0Cit7CisJLyoKKwkgKiBDcmVhdGUgYSBuZXcgRFNNIHNlZ21lbnQsIGFuZCBtYXAgaXQg dG8gdGhlIGN1cnJlbnQgcHJvY2VzcydzIGFkZHJlc3MKKwkgKiBzcGFjZS4KKwkgKgorCSAq IE5vdGU6IHRoZSBtYXBwZWRfc2l6ZSBjYW4gZGlmZmVyIGZyb20gcmVxdWVzdGVkIHNpemUg KGN1cnJlbnRseSBvbmx5CisJICogV2luZG93cykKKwkgKgorCSAqLworCWRzbV9pbXBsX2hh bmRsZSgqY3JlYXRlKSAoU2l6ZSByZXF1ZXN0X3NpemUsIGRzbV9pbXBsX3ByaXZhdGUgKmlt cGxfcHJpdmF0ZSwKKwkJCQkJCQkgIHZvaWQgKiptYXBwZWRfYWRkcmVzcywgaW50IGVsZXZl bCk7CisKKwkvKgorCSAqIE1hcCBhbiBleGlzdGluZyBEU00gc2VnbWVudCB0byBjdXJyZW50 IHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLgorCSAqLworCWJvb2wJCSgqYXR0YWNoKSAoZHNt X2ltcGxfaGFuZGxlIGhhbmRsZSwgZHNtX2ltcGxfcHJpdmF0ZSAqaW1wbF9wcml2YXRlLAor CQkJCQkJICAgdm9pZCAqKm1hcHBlZF9hZGRyZXNzLCBTaXplICptYXBwZWRfc2l6ZSwgaW50 IGVsZXZlbCk7CisKKwkvKgorCSAqIFVubWFwCisJICovCisJYm9vbAkJKCpkZXRhY2gpIChk c21faW1wbF9oYW5kbGUgaGFuZGxlLCBkc21faW1wbF9wcml2YXRlIGltcGxfcHJpdmF0ZSwK KwkJCQkJCSAgIHZvaWQgKm1hcHBlZF9hZGRyZXNzLCBTaXplIG1hcHBlZF9zaXplLCBpbnQg ZWxldmVsKTsKKworCS8qCisJICogRGVzdHJveSBhIERTTSBzZWdtZW50LgorCSAqCisJICog Tm90ZTogbXVzdCBkZXRhY2ggZmlyc3QKKwkgKi8KKwlib29sCQkoKmRlc3Ryb3kpIChkc21f aW1wbF9oYW5kbGUgaGFuZGxlLCBpbnQgZWxldmVsKTsKKworCS8qCisJICogSW1wbGVtZW50 YXRpb24tc3BlY2lmaWMgYWN0aW9ucyB0aGF0IG11c3QgYmUgcGVyZm9ybWVkIHdoZW4gYSBz ZWdtZW50CisJICogaXMgdG8gYmUgcHJlc2VydmVkIGV2ZW4gd2hlbiBubyBiYWNrZW5kIGhh cyBpdCBhdHRhY2hlZC4KKwkgKi8KKwl2b2lkCQkoKnBpbl9zZWdtZW50KSAoZHNtX2ltcGxf aGFuZGxlIGhhbmRsZSwgZHNtX2ltcGxfcHJpdmF0ZSBpbXBsX3ByaXZhdGUsCisJCQkJCQkJ CWRzbV9pbXBsX3ByaXZhdGVfcG1faGFuZGxlICpwbV9oYW5kbGUpOworCisJLyoKKwkgKiBJ bXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBhY3Rpb25zIHRoYXQgbXVzdCBiZSBwZXJmb3JtZWQg d2hlbiBhIHNlZ21lbnQKKwkgKiBpcyBubyBsb25nZXIgdG8gYmUgcHJlc2VydmVkLCBzbyB0 aGF0IGl0IHdpbGwgYmUgY2xlYW5lZCB1cCB3aGVuIGFsbAorCSAqIGJhY2tlbmRzIGhhdmUg ZGV0YWNoZWQgZnJvbSBpdC4KKwkgKi8KKwl2b2lkCQkoKnVucGluX3NlZ21lbnQpIChkc21f aW1wbF9oYW5kbGUgaGFuZGxlLCBkc21faW1wbF9wcml2YXRlX3BtX2hhbmRsZSBwbV9oYW5k bGUpOworfSBkc21faW1wbF9vcHM7CisKK2V4dGVybiBQR0RMTElNUE9SVCBjb25zdCBkc21f aW1wbF9vcHMgKmRzbV9pbXBsOworCisjaWZkZWYgVVNFX0RTTV9QT1NJWAorZXh0ZXJuIFBH RExMSU1QT1JUIGNvbnN0IGRzbV9pbXBsX29wcyBkc21faW1wbF9wb3NpeF9vcHM7CisjZW5k aWYKKyNpZmRlZiBVU0VfRFNNX1NZU1YKK2V4dGVybiBQR0RMTElNUE9SVCBjb25zdCBkc21f aW1wbF9vcHMgZHNtX2ltcGxfc3lzdl9vcHM7CisjZW5kaWYKKyNpZmRlZiBVU0VfRFNNX1dJ TkRPV1MKK2V4dGVybiBQR0RMTElNUE9SVCBjb25zdCBkc21faW1wbF9vcHMgZHNtX2ltcGxf d2luZG93c19vcHM7CisjZW5kaWYKKyNpZmRlZiBVU0VfRFNNX01NQVAKK2V4dGVybiBQR0RM TElNUE9SVCBjb25zdCBkc21faW1wbF9vcHMgZHNtX2ltcGxfbW1hcF9vcHM7CisjZW5kaWYK KworZXh0ZXJuIHZvaWQgZHNtX2ltcGxfbm9vcF9waW5fc2VnbWVudChkc21faW1wbF9oYW5k bGUgaGFuZGxlLCBkc21faW1wbF9wcml2YXRlIGltcGxfcHJpdmF0ZSwKKwkJCQkJCQkJCSAg ZHNtX2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgKnBtX2hhbmRsZSk7CitleHRlcm4gdm9pZCBk c21faW1wbF9ub29wX3VucGluX3NlZ21lbnQoZHNtX2ltcGxfaGFuZGxlIGhhbmRsZSwgZHNt X2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgcG1faGFuZGxlKTsKIAotLyogSW1wbGVtZW50YXRp b24tZGVwZW5kZW50IGFjdGlvbnMgcmVxdWlyZWQgdG8ga2VlcCBzZWdtZW50IHVudGlsIHNo dXRkb3duLiAqLwotZXh0ZXJuIHZvaWQgZHNtX2ltcGxfcGluX3NlZ21lbnQoZHNtX2hhbmRs ZSBoYW5kbGUsIGRzbV9pbXBsX3ByaXZhdGUgaW1wbF9wcml2YXRlLAotCQkJCQkJCQkgZHNt X2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgKmltcGxfcHJpdmF0ZV9wbV9oYW5kbGUpOwotZXh0 ZXJuIHZvaWQgZHNtX2ltcGxfdW5waW5fc2VnbWVudChkc21faGFuZGxlIGhhbmRsZSwgZHNt X2ltcGxfcHJpdmF0ZV9wbV9oYW5kbGUgKnBtX2hhbmRsZSk7CitleHRlcm4gaW50CWVycmNv ZGVfZm9yX2R5bmFtaWNfc2hhcmVkX21lbW9yeSh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8q IERTTV9JTVBMX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcGdfc2ht ZW0uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcGdfc2htZW0uaAppbmRleCAzMDY1ZmY1YmU3 MS4uYzMxOWFkNjIwOGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcGdfc2ht ZW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3BnX3NobWVtLmgKQEAgLTMzLDcgKzMz LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdTaG1lbUhlYWRlcgkvKiBzdGFuZGFyZCBoZWFkZXIg Zm9yIGFsbCBQb3N0Z3JlcyBzaG1lbSAqLwogCXBpZF90CQljcmVhdG9yUElEOwkJLyogUElE IG9mIGNyZWF0aW5nIHByb2Nlc3MgKHNldCBidXQgdW5yZWFkKSAqLwogCVNpemUJCXRvdGFs c2l6ZTsJCS8qIHRvdGFsIHNpemUgb2Ygc2VnbWVudCAqLwogCVNpemUJCWZyZWVvZmZzZXQ7 CQkvKiBvZmZzZXQgdG8gZmlyc3QgZnJlZSBzcGFjZSAqLwotCWRzbV9oYW5kbGUJZHNtX2Nv bnRyb2w7CS8qIElEIG9mIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBjb250cm9sIHNlZyAqLwor CWRzbV9pbXBsX2hhbmRsZSBkc21fY29udHJvbDsJLyogSUQgb2YgZHluYW1pYyBzaGFyZWQg bWVtb3J5IGNvbnRyb2wgc2VnICovCiAJdm9pZAkgICAqaW5kZXg7CQkJLyogcG9pbnRlciB0 byBTaG1lbUluZGV4IHRhYmxlICovCiAjaWZuZGVmIFdJTjMyCQkJCQkvKiBXaW5kb3dzIGRv ZXNuJ3QgaGF2ZSB1c2VmdWwgaW5vZGUjcyAqLwogCWRldl90CQlkZXZpY2U7CQkJLyogZGV2 aWNlIGRhdGEgZGlyZWN0b3J5IGlzIG9uICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9ndWNfaG9va3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oCmluZGV4 IDMzOWM0OTAzMDBlLi4yODliNWM3YWRkYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvZ3VjX2hvb2tzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmgKQEAg LTU5LDYgKzU5LDggQEAgZXh0ZXJuIGJvb2wgY2hlY2tfZGVmYXVsdF90ZXh0X3NlYXJjaF9j b25maWcoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3UKIGV4dGVybiB2b2lk IGFzc2lnbl9kZWZhdWx0X3RleHRfc2VhcmNoX2NvbmZpZyhjb25zdCBjaGFyICpuZXd2YWws IHZvaWQgKmV4dHJhKTsKIGV4dGVybiBib29sIGNoZWNrX2RlZmF1bHRfd2l0aF9vaWRzKGJv b2wgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAogCQkJCQkJCQkJR3VjU291cmNlIHNvdXJjZSk7 CitleHRlcm4gdm9pZCBhc3NpZ25fZHluYW1pY19zaGFyZWRfbWVtb3J5X3R5cGUoaW50IG5l d19keW5hbWljX3NoYXJlZF9tZW1vcnlfdHlwZSwKKwkJCQkJCQkJCQkJICB2b2lkICpleHRy YSk7CiBleHRlcm4gYm9vbCBjaGVja19lZmZlY3RpdmVfaW9fY29uY3VycmVuY3koaW50ICpu ZXd2YWwsIHZvaWQgKipleHRyYSwKIAkJCQkJCQkJCQkgICBHdWNTb3VyY2Ugc291cmNlKTsK IGV4dGVybiBib29sIGNoZWNrX2h1Z2VfcGFnZV9zaXplKGludCAqbmV3dmFsLCB2b2lkICoq ZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggODlhYTQxYjVl MzEuLjg3NTBlYWIwM2RlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxl CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgU1VC RElSUyA9IFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCiAJCSAgdGVzdF9kZGxfZGVwYXJz ZSBcCiAJCSAgdGVzdF9kc2EgXAorCQkgIHRlc3RfZHNtIFwKIAkJICB0ZXN0X2RzbV9yZWdp c3RyeSBcCiAJCSAgdGVzdF9leHRlbnNpb25zIFwKIAkJICB0ZXN0X2dpbnBvc3RpbmdsaXN0 IFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVz dC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDhmYmU3NDJkMzg1Li41NGIxYzI2YTdmYSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsxNyw3IEBAIHN1YmRpcigndGVzdF9j b3B5X2NhbGxiYWNrcycpCiBzdWJkaXIoJ3Rlc3RfY3VzdG9tX3JtZ3JzJykKIHN1YmRpcign dGVzdF9kZGxfZGVwYXJzZScpCiBzdWJkaXIoJ3Rlc3RfZHNhJykKK3N1YmRpcigndGVzdF9k c20nKQogc3ViZGlyKCd0ZXN0X2RzbV9yZWdpc3RyeScpCiBzdWJkaXIoJ3Rlc3RfZXh0ZW5z aW9ucycpCiBzdWJkaXIoJ3Rlc3RfZ2lucG9zdGluZ2xpc3QnKQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RzbS8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RzbS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi45YTczNzgyM2UxNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kc20vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKyMgR2VuZXJhdGVkIHN1YmRp cmVjdG9yaWVzCisvbG9nLworL3RtcF9jaGVjay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kc20vTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNtL01h a2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMjE2ODQ5 MDY1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc20vTWFr ZWZpbGUKQEAgLTAsMCArMSwyNyBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNtL01h a2VmaWxlCisKK01PRFVMRV9iaWcgPSB0ZXN0X2RzbQorT0JKUyA9IFwKKwkkKFdJTjMyUkVT KSBcCisJdGVzdF9kc20ubworUEdGSUxFREVTQyA9ICJ0ZXN0X2RzbSAtIHRlc3QgY29kZSBm b3IgZHluYW1pYyBzaGFyZWQgbWVtb3J5IgorCitFWFRFTlNJT04gPSB0ZXN0X2RzbQorREFU QSA9IHRlc3RfZHNtLS0xLjAuc3FsCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBw Z19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVk ZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNtCit0 b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3Jj L01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJp Yi1nbG9iYWwubWsKK2VuZGlmCisKK2NoZWNrOgorCSQocHJvdmVfY2hlY2spCisKK2luc3Rh bGxjaGVjazoKKwkkKHByb3ZlX2luc3RhbGxjaGVjaykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kc20vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZHNtL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li40MzIxY2FiZTZjNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9kc20vbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKGMpIDIw MjItMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordGVzdF9k c21fc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9kc20uYycsCispCisKK2lmIGhvc3Rfc3lz dGVtID09ICd3aW5kb3dzJworICB0ZXN0X2RzbV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJv Y2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAndGVzdF9k c20nLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfZHNtIC0gdGVzdCBjb2RlIGZvciBkeW5h bWljIHNoYXJlZCBtZW1vcnknLF0pCitlbmRpZgorCit0ZXN0X2RzbSA9IHNoYXJlZF9tb2R1 bGUoJ3Rlc3RfZHNtJywKKyAgdGVzdF9kc21fc291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0 X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xpYnMgKz0gdGVzdF9kc20KKwordGVzdF9p bnN0YWxsX2RhdGEgKz0gZmlsZXMoCisgICd0ZXN0X2RzbS5jb250cm9sJywKKyAgJ3Rlc3Rf ZHNtLS0xLjAuc3FsJywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2RzbScs CisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5j dXJyZW50X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsKKyAgICAg ICd0LzAwMV9kc21fYmFzaWMucGwnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNtL3QvMDAxX2RzbV9iYXNpYy5wbCBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kc20vdC8wMDFfZHNtX2Jhc2ljLnBsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYWNjNGU3NWNlMQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc20vdC8wMDFfZHNtX2Jhc2ljLnBsCkBAIC0wLDAg KzEsNjEgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisKKyMgUnVuIHRoZSBzdGFuZGFyZCByZWdyZXNzaW9uIHRlc3Rz IHdpdGggc3RyZWFtaW5nIHJlcGxpY2F0aW9uCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdz IEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBGaWxlOjpC YXNlbmFtZTsKKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZQorbXkgJG5vZGUgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KCk7CisK KyMgUnVuIGEgU1FMIGNvbW1hbmQgYW5kIHJldHVybiBwc3FsJ3Mgc3RkZXJyIChpbmNsdWRp bmcgZGVidWcgbWVzc2FnZXMpCitzdWIgcnVuX2RzbV9iYXNpY190ZXN0Cit7CisJbG9jYWwg JFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxkZXI6OkxldmVsICsgMTsKKwor CW15ICRkeW5hbWljX3NoYXJlZF9tZW1vcnlfdHlwZSA9IHNoaWZ0OworCW15ICRtaW5fZHlu YW1pY19zaGFyZWRfbWVtb3J5ID0gc2hpZnQ7CisKKwkkbm9kZS0+YWRqdXN0X2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsICdkeW5hbWljX3NoYXJlZF9tZW1vcnlfdHlwZScsICRkeW5hbWlj X3NoYXJlZF9tZW1vcnlfdHlwZSk7CisJJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3Fs LmNvbmYnLCAnbWluX2R5bmFtaWNfc2hhcmVkX21lbW9yeScsICRtaW5fZHluYW1pY19zaGFy ZWRfbWVtb3J5KTsKKworCSRub2RlLT5zdGFydDsKKworCSRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyB0ZXN0X2RzbScpOwor CisJbXkgJHN0ZGVycjsKKwlteSAkY21kcmV0ID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywg J1NFTEVDVCB0ZXN0X2RzbV9iYXNpYygpJywgc3RkZXJyID0+IFwkc3RkZXJyKTsKKwlvaygk Y21kcmV0ID09IDAsICIkZHluYW1pY19zaGFyZWRfbWVtb3J5X3R5cGUgd2l0aCBtaW5zaXpl ICRtaW5fZHluYW1pY19zaGFyZWRfbWVtb3J5Iik7CisJaXMoJHN0ZGVyciwgJycsICIkZHlu YW1pY19zaGFyZWRfbWVtb3J5X3R5cGUgd2l0aCBtaW5zaXplICRtaW5fZHluYW1pY19zaGFy ZWRfbWVtb3J5Iik7CisKKwkkbm9kZS0+c3RvcCgnZmFzdCcpOworfQorCisjIFRlc3QgYWxs IHRoZSBEU00gaW1wbGVtZW50YXRpb25zCisKK1NLSVA6Cit7CisJc2tpcCAiU2tpcHBpbmcg cG9zaXgsIHN5c3YsIG1tYXAgdGVzdCBvbiBXaW5kb3dzIiwgMiBpZiAoJHdpbmRvd3Nfb3Mp OworCisJcnVuX2RzbV9iYXNpY190ZXN0KCdwb3NpeCcsIDApOworCXJ1bl9kc21fYmFzaWNf dGVzdCgncG9zaXgnLCAxMDAwMDAwKTsKKwlydW5fZHNtX2Jhc2ljX3Rlc3QoJ3N5c3YnLCAw KTsKKwlydW5fZHNtX2Jhc2ljX3Rlc3QoJ3N5c3YnLCAxMDAwMDAwKTsKKwlydW5fZHNtX2Jh c2ljX3Rlc3QoJ21tYXAnLCAwKTsKKwlydW5fZHNtX2Jhc2ljX3Rlc3QoJ21tYXAnLCAxMDAw MDAwKTsKK30KKworU0tJUDoKK3sKKwlza2lwICJXaW5kb3dzIGRzbSBzdXBwb3J0IiwgMiBp ZiAoISR3aW5kb3dzX29zKTsKKworCXJ1bl9kc21fYmFzaWNfdGVzdCgnd2luZG93cycsIDAp OworCXJ1bl9kc21fYmFzaWNfdGVzdCgnd2luZG93cycsIDEwMDAwMDApOworfQorCitkb25l X3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc20vdGVz dF9kc20tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNtL3Rlc3RfZHNtLS0x LjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZGJkYzgx MWI4MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc20vdGVz dF9kc20tLTEuMC5zcWwKQEAgLTAsMCArMSw5IEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZHNtL3Rlc3RfZHNtLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBp cyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitc ZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9kc20iIHRvIGxvYWQgdGhpcyBmaWxl LiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9kc21fYmFzaWMoKQorCVJFVFVSTlMg cGdfY2F0YWxvZy52b2lkCisJQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzbS90ZXN0X2RzbS5jIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RzbS90ZXN0X2RzbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4zYjY0ZDhhMmYwMgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kc20vdGVzdF9kc20uYwpAQCAtMCwwICsxLDc1IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9kc20uYworICoJCVRlc3QgZHlu YW1pYyBzaGFyZWQgbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjQsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCQlzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNtL3Rlc3RfZHNtLmMKKyAqCisgKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAiZm1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCisKK1BHX01PRFVMRV9N QUdJQzsKKworCisvKiBUZXN0IGJhc2ljIERTTSBmdW5jdGlvbmFsaXR5ICovCitQR19GVU5D VElPTl9JTkZPX1YxKHRlc3RfZHNtX2Jhc2ljKTsKK0RhdHVtCit0ZXN0X2RzbV9iYXNpYyhQ R19GVU5DVElPTl9BUkdTKQoreworCWRzbV9zZWdtZW50ICpzZWc7CisJdW5zaWduZWQgY2hh ciAqcDsKKwlTaXplCQlyZXF1ZXN0ZWRfc2l6ZTsKKwlTaXplCQljcmVhdGVkX3NpemU7CisJ U2l6ZQkJYXR0YWNoZWRfc2l6ZTsKKwlkc21faGFuZGxlCWhhbmRsZTsKKworCS8qIENyZWF0 ZSBhIHNtYWxsIERTTSBzZWdtZW50ICovCisJcmVxdWVzdGVkX3NpemUgPSAxMDAwOworCXNl ZyA9IGRzbV9jcmVhdGUocmVxdWVzdGVkX3NpemUsIDApOworCisJaGFuZGxlID0gZHNtX3Nl Z21lbnRfaGFuZGxlKHNlZyk7CisJY3JlYXRlZF9zaXplID0gZHNtX3NlZ21lbnRfbWFwX2xl bmd0aChzZWcpOworCWlmIChyZXF1ZXN0ZWRfc2l6ZSAhPSBjcmVhdGVkX3NpemUpCisJCWVs b2coRVJST1IsICJEU00gc2l6ZSBtaXNtYXRjaCwgcmVxdWVzdGVkICVsdSBidXQgY3JlYXRl ZCBhcyAlbHUiLCByZXF1ZXN0ZWRfc2l6ZSwgY3JlYXRlZF9zaXplKTsKKworCS8qIEZpbGwg aXQgd2l0aCBkYXRhICovCisJcCA9IGRzbV9zZWdtZW50X2FkZHJlc3Moc2VnKTsKKwltZW1z ZXQocCwgMHgxMiwgcmVxdWVzdGVkX3NpemUpOworCisJLyogUGluIHRoZSBzZWdtZW50IHNv IHRoYXQgaXQncyBub3QgZGVzdHJveWVkIHdoZW4gd2UgZGV0YWNoIGl0ICovCisJZHNtX3Bp bl9zZWdtZW50KHNlZyk7CisKKwkvKiBEZXRhY2ggYW5kIHJlLWF0dGFjaCBpdCAqLworCWRz bV9kZXRhY2goc2VnKTsKKwlzZWcgPSBkc21fYXR0YWNoKGhhbmRsZSk7CisKKwkvKgorCSAq IENoZWNrIHRoZSBzaXplIGFmdGVyIHJlLWF0dGFjaGluZy4gIEl0IGNhbiBiZSBsYXJnZXIg dGhhbiB3aGF0IHdhcworCSAqIHJlcXVlc3RlZCBvcmlnaW5hbGx5LCBiZWNhdXNlIHNvbWUg aW1wbGVtZW50YXRpb25zIHJvdW5kIGl0IHVwIHRvIHRoZQorCSAqIG5lYXJlc3QgcGFnZSBz aXplLiBUb2xlcmF0ZSB0aGF0LgorCSAqLworCWF0dGFjaGVkX3NpemUgPSBkc21fc2VnbWVu dF9tYXBfbGVuZ3RoKHNlZyk7CisJaWYgKGF0dGFjaGVkX3NpemUgPCBjcmVhdGVkX3NpemUp CisJCWVsb2coRVJST1IsICJEU00gc2l6ZSBtaXNtYXRjaCwgY3JlYXRlZCAlbHUgYnV0IGF0 dGFjaGVkICVsdSIsIGNyZWF0ZWRfc2l6ZSwgYXR0YWNoZWRfc2l6ZSk7CisJaWYgKHJlcXVl c3RlZF9zaXplICsgMTAwMDAwIDwgY3JlYXRlZF9zaXplKQorCQllbG9nKEVSUk9SLCAidW5l eHBlY3RkbHkgbGFyZ2Ugc2l6ZSBhZnRlciBhdHRhY2g6IHJlcXVlc3RlZCAlbHUgYnV0IGdv dCAlbHUiLCByZXF1ZXN0ZWRfc2l6ZSwgY3JlYXRlZF9zaXplKTsKKworCS8qIGNoZWNrIGNv bnRlbnRzICovCisJcCA9IGRzbV9zZWdtZW50X2FkZHJlc3Moc2VnKTsKKwlmb3IgKFNpemUg aTsgaSA8IGNyZWF0ZWRfc2l6ZTsgaSsrKQorCXsKKwkJaWYgKHBbaV0gIT0gMHgxMikKKwkJ CWVsb2coRVJST1IsICJEU00gc2VnbWVudCBoYXMgdW5leHBlY3RlZCBjb250ZW50ICV1IGF0 IG9mZnNldCAlbHUiLCBwW2ldLCBpKTsKKwl9CisKKwlkc21fZGV0YWNoKHNlZyk7CisKKwlQ R19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RzbS90ZXN0X2RzbS5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzbS90ZXN0 X2RzbS5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4y YzI1YzRkNTVmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k c20vdGVzdF9kc20uY29udHJvbApAQCAtMCwwICsxLDQgQEAKK2NvbW1lbnQgPSAnVGVzdCBj b2RlIGZvciBkeW5hbWljIHNoYXJlZCBtZW1vcnknCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4w JworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvdGVzdF9kc20nCityZWxvY2F0YWJsZSA9 IHRydWUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZDgwOGFhZDhiMDUuLjM5 YjExYzg4YzlkIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzMyMiw2ICsz MzIyLDkgQEAgZHNoYXNoX3RhYmxlX2l0ZW0KIGRzbV9jb250cm9sX2hlYWRlcgogZHNtX2Nv bnRyb2xfaXRlbQogZHNtX2hhbmRsZQorZHNtX2ltcGxfb3BzCitkc21faW1wbF9wcml2YXRl Citkc21faW1wbF9wcml2YXRlX3BtX2hhbmRsZQogZHNtX29wCiBkc21fc2VnbWVudAogZHNt X3NlZ21lbnRfZGV0YWNoX2NhbGxiYWNrCi0tIAoyLjM5LjIKCg== --------------6qX8Lat75wUwPdoQnpnr5BFA--