Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vT4pj-00CObW-2S for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Dec 2025 21:01:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vT4pi-007223-1L for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Dec 2025 21:01:18 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vT4ph-00721u-1P for pgsql-hackers@lists.postgresql.org; Tue, 09 Dec 2025 21:01:18 +0000 Received: from mail-qk1-x736.google.com ([2607:f8b0:4864:20::736]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vT4pe-003zk1-2o for pgsql-hackers@postgresql.org; Tue, 09 Dec 2025 21:01:16 +0000 Received: by mail-qk1-x736.google.com with SMTP id af79cd13be357-8b23b6d9f11so563220685a.3 for ; Tue, 09 Dec 2025 13:01:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1765314073; x=1765918873; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=kPn957olO9lI20CdTWCx21amunw3X7ez7Naw5B6ulV8=; b=ha2EsEpWFOdKL+vaMYendtWUCMU9VVn5vwtQGM/C6S8NeR/cOIRF8ai+ZMrcttoNLy uz3bnx4Bqk7+FL4FQF4JfHU24PyPp+6mn/0bjbQm8gyCTTK4UersNWmBacJ+Zl+Q9g5c +K1f1wzzPcf+FtgHd/xl/EACN7Zeg5Q4Sr8PRywK2/nD42IWlItqOa0VDkS6Gkc0JVSk G9ntBQGuPdkdgQ3ZQgPeROsDs3a+zt22cbeztOhgciI6WCxrCMPe9CHJ7vVh5YbsPUFR 40mMLwORJSX6YWYE5nxZptWXo+0SPDjWA3TjnMB+H14wTKUaTA8Ey0V/pCnSDfNhbF/O JmQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765314073; x=1765918873; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kPn957olO9lI20CdTWCx21amunw3X7ez7Naw5B6ulV8=; b=s2llY84ixjy92Sief6x8V7K48a6ykrxEt3vp21Qt7QLCAzmCXSewD/xR4oRgkNA3E1 //4PVNl3XfSwYA8a2DLYLrEQaZkQCQoW0rt6QNvO6cFfwWKEsKdxr+kE2JYChOq1VHFF 20rMKXSTpIXbFwp6vyLU41QFaQ/iKxoEf0rob4CXx4ffuneEuE5gaoR16XV3x5i2bfmu W7iJTBz4AgXTcZqOnNhPOz596HFlEV6GnLhoxtE3/d+qq+S+8ImkuzMgDF7N+whVyhIi 8wOkHwKl4VILfs2hJyXot5nTf3D6ydRglDjWSGnavSRRYW7Nww6VQscSuNJwm7RJDCA1 oocw== X-Gm-Message-State: AOJu0Yxc9lplblkb53e8sZNE5couod+yp+qKyLrKW06q8UAGJ3UyhLfq tiH9RoHCRHLokLEQMBTepBaVSV5rLr/ByEf3YGXdrTuUT8Akzsf3cT8bopRDBRIbIHiHn0nt5l6 lQzmA7dDjQgLX6UUlW7OOrvJIrKQ8hPQ4dNTGSFFDViP+sAnNyMiFEQ== X-Gm-Gg: ASbGncu8PJsUPzRHMWOtsrE+xNrTyU9uZibsx1eVixdT0OtcYONbfWDksqqshuJpKQc 2icWNUjqBHufJwBVBYBAUb912j1WuMimK/Bs8niutUurjZuf/ZnnMyBycWZ6SQVwOvR2hpiGp2p 3jJdebwmQB3iCEUSZZLmoVwTu7BEAUmh5iWRwyVngCEWzwD1YoYsO4CGNywGnEy/bSw3ZZqaiJy RHgbZpNAMQuzFDbeeSPFlrqUQUU8BZqARizasGFqsUPJUuLCxpo9C6oadjDzgpdRAqF3t1d4k31 rDH1tCxT X-Google-Smtp-Source: AGHT+IGAQMsTEwMuo0chGaSM/I+pOrRlBJaDUA2tjCaJp57zjCvEF3Oul/YeUT58odbLR5a1tzV+792HYMRyUHUNK4U= X-Received: by 2002:a05:620a:400d:b0:8a1:ca96:5d39 with SMTP id af79cd13be357-8ba39f4c2e4mr58387785a.59.1765314072370; Tue, 09 Dec 2025 13:01:12 -0800 (PST) MIME-Version: 1.0 From: Jacob Champion Date: Tue, 9 Dec 2025 13:00:58 -0800 X-Gm-Features: AQt7F2rhAAYSKRtbqlYkJDnonFHW2p5auhGoyzlEY0j0bC_L_GkwZYbIEtGmJVE Message-ID: Subject: [oauth] Stabilize the libpq-oauth ABI (and allow alternative implementations?) To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000341f9f06458b36fb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000341f9f06458b36fb Content-Type: text/plain; charset="UTF-8" Hi everybody, We introduced the libpq-oauth module late in the cycle for PG18, and to put it mildly, its interface isn't great. The original implementation depended on libpq internals, and we had to make sure that we didn't start crashing during major or minor version upgrades. So there were a bunch of compromises made to keep things safe, including the restriction that the module name has to change every major release. Separately, but closely related: PG18's OAuth support allows you to customize the client flow via a libpq hook function. Third-party applications can make use of that, but our own utilities can still only use the builtin device flow. That's annoying. I've been working to replace the internal ABI with a stable one, hopefully to solve both problems at the same time. A dlopen() is a pretty clear seam for other people to use to modify and extend. Unfortunately my first attempt (not pictured) ended up in a rabbit hole, because I tried to tackle the third-party use case first. My second attempt, attached, focuses on the ABI stabilization instead, which I think is more likely to succeed. (This took enough thinking that I'm really glad we didn't try this for PG18. Thanks for letting me take on some technical debt for a bit.) = Design = Here's the train of thought behind the core changes (which are in patch 0004): The builtin-flow code in fe-auth-oauth.c is similar to the custom-flow code, but it's just ever-so-slightly different. I'd like to unify the two, so I want libpq-oauth to make use of the public PGoauthBearerRequest API, and that means that almost all of the injections made in the PG18 ABI need to be replaced. Most of those injections are simply subsumed by the hook API (hooray!). A couple of others can be replaced by PQconninfo(). Four are left over: - pgthreadlock_t - libpq_gettext - conn->errorMessage - conn->oauth_issuer_id I think we should keep injecting libpq_gettext; no third-party implementations would be able to use that. And application hooks are presumably capable of figuring out top-level locking already, since the application has to have called PQregisterThreadLock() if it needed to coordinate with libpq. That leaves error messages and the issuer identifier. I think both would be useful for hooks to have, too, so I'd like to add them to PQAUTHDATA_OAUTH_BEARER_TOKEN. = PQAUTHDATA_OAUTH_BEARER_TOKEN, version 2 = My original plan for authdata extensions was to add new members to the end of the structs that libpq passes into the hook. Applications would gate on a feature macro during compilation to see whether they could use the new members. That should work fine for an application hook; you're not allowed to downgrade libpq past the version that your applications are compiled against, lest you lose symbols (or other feature-flag functionality) you're relying on. Plugins, unfortunately, can't rely on the feature macro. As we found out during the libpq-oauth split [1], we have to handle a long-running application with an old libpq that loads an upgraded libpq-oauth, even if the OS package dependencies suggest otherwise. (A plugin architecture flips the direction of the runtime dependency arrow.) There are a couple ways we could handle this. For this draft, I've implemented what I think is a middle ground between verbosity and type-safety: introduce a new V2 struct that "inherits" the V1 struct and can be down-cast in the callbacks, kinda similar to our Node hierarchy. We could go even more verbose, and duplicate the entire PGoauthBearerToken struct -- matching the callback parameter types for maximum safety -- but I'm not convinced that this would be a good use of maintenance effort. The ability to cast between the two means we can share v1 and v2 implementations in our tests. We could also just add the new members at the end, say that you're only allowed to use them if the V2 hook type is in use, and scribble on them in V1 hooks to try to get misbehaving implementations to crash outright. This arguably has the same amount of type-safety as the downcast, and the resulting code looks nicer. (The libcurl API we use does something similar with curl_version_info().) But it is definitely more "magic". Also of note: this adds a PQExpBuffer to libpq-fe.h. Technically, that type is "internal". But... is it really, though? It doesn't seem possible for us to make incompatible changes there without crashing earlier psqls, in which case I would like to make use of it too. Maybe this deserves its own minithread. Okay, on to the full patchset. = Roadmap: Prep = The first few patches are bugfixes I intend to backpatch to 18. - 0001: I stomped on the SOCKTYPE name in libpq-fe.h, but that's not in our namespace and it's conceivable that it might collide with someone else. (It collided with my own test code during my work on this.) - 0002 fixes a copy-paste bug in meson.build, which luckily hadn't caused problems yet. - 0003 ports Tom's debug2 fix for Test::Cluster::connect_fails() over to 002_client.pl. (Currently, log checks in this test aren't made after connection failures, but I don't really want to chase that down later after I've forgotten about it.) = Roadmap: Implementation = Next three patches are the core implementation, which stabilizes the ABI for libpq-oauth. I feel fairly confident that this, or something close to it, could land in PG19. - 0004 introduces the new PQAUTHDATA_OAUTH_BEARER_TOKEN_V2 API. As described above. - 0005 makes use of the new API in libpq-oauth. This removes more code than it introduces, which is exciting. Now we can rename libpq-oauth-19.so to just libpq-oauth.so, since we no longer depend on anything that could change between major versions. (We still need lock and locale support from libpq, as mentioned above, so they continue to be decoupled via injection at init time.) Some of the code in this patch overlaps with the translation fixes thread [2], which I need to get to first. I'm hoping some additional simplifications can be made after those localization bugs are fixed. I think I'd also like to get the threadlock into the module API (but not the hook API). A third-party flow might need to perform its own one-time initialization, and if it relies on an old version of Curl (or worse, Kerberos [3]), it'll need to use the same lock that the top-level application has registered for libpq. So I imagine I'll need to break out an initialization function here. Alternatively, I could introduce an API into libpq to retrieve the threadlock function in use? - 0006 removes a potential ABI-compatibility pitfall for future devs. libpq-oauth needs to use the shared-library variant of libpgcommon, but it can no longer assume that the encoding support exported by libpq is compatible. So it must not accidentally link against those functions (see [4]). I don't imagine anyone will try adding code that does this in practice; we're pretty UTF8-centric in OAuth. But just to be safe, define USE_PRIVATE_ENCODING_FUNCS so that anyone who tries will fail the build. = Roadmap: Plugins? = So now we have a stable ABI, which technically means that any enterprising developer who wants to play games with LD_LIBRARY_PATH could implement their own version of an OAuth flow, and have our utilities make use of it into the future. That brings us to patch 0007, which experimentally promotes the stable API to a public header, and introduces a really janky environment variable so that people don't have to play games. It will be obvious from the code that this is not well-baked yet. I hope the ability to dlopen() a custom flow can make it for 19; I just don't know that this envvar approach is any good. The ideal situation, IMO, is for a flow to be selected in the connection string. But we have to lock that down, similarly to how we protect local_preload_libraries, to prevent horrible exploits. At which point we'll have essentially designed a generic libpq plugin system. Not necessarily a terrible thing, but I don't think I have time to take it on for PG19. WDYT? --Jacob [1] https://postgr.es/m/aAkJnDQq3mOUvmQV%40msg.df7cb.de [2] https://postgr.es/m/TY4PR01MB1690746DB91991D1E9A47F57E94CDA%40TY4PR01MB16907.jpnprd01.prod.outlook.com [3] https://postgr.es/m/aSSp03wmNMngi/Oe%40ubby [4] https://postgr.es/c/b6c7cfac8 --000000000000341f9f06458b36fb Content-Type: application/octet-stream; name="0001-libpq-fe.h-Don-t-claim-SOCKTYPE-in-the-global-namesp.patch" Content-Disposition: attachment; filename="0001-libpq-fe.h-Don-t-claim-SOCKTYPE-in-the-global-namesp.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miz1s0wt0 RnJvbSAzYjI3ZjU0YjRkY2MxMTVkNjk0YTY1NWY1MzhlNjY0MzMxOGZhYmI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogTW9uLCAxIERlYyAyMDI1IDEwOjUwOjQyIC0wODAwClN1YmplY3Q6 IFtQQVRDSCAxLzddIGxpYnBxLWZlLmg6IERvbid0IGNsYWltIFNPQ0tUWVBFIGluIHRoZSBnbG9i YWwgbmFtZXNwYWNlCgpUaGUgZGVmaW5pdGlvbiBvZiBQR29hdXRoQmVhcmVyUmVxdWVzdCB1c2Vz IGEgdGVtcG9yYXJ5IFNPQ0tUWVBFIG1hY3JvCnRvIGhpZGUgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl biBXaW5kb3dzIGFuZCBCZXJrZWxleSBzb2NrZXQgaGFuZGxlcywKc2luY2Ugd2UgZG9uJ3Qgc3Vy ZmFjZSBwZ3NvY2tldCBpbiBvdXIgcHVibGljIEFQSS4gVGhpcyBtYWNybyBkb2Vzbid0Cm5lZWQg dG8gZXNjYXBlIHRoZSBoZWFkZXIsIGJlY2F1c2UgaW1wbGVtZW50ZXJzIHdpbGwgY2hvb3NlIHRo ZSBjb3JyZWN0CnNvY2tldCB0eXBlIGJhc2VkIG9uIHRoZWlyIHBsYXRmb3JtLCBzbyBJICN1bmRl ZidkIGl0IGltbWVkaWF0ZWx5IGFmdGVyCnVzZS4KCkkgZGlkbid0IG5hbWVzcGFjZSB0aGF0IGhl bHBlciwgdGhvdWdoLCBzbyBpZiBhbnlvbmUgZWxzZSBuZWVkcyBhClNPQ0tUWVBFIG1hY3JvLCBs aWJwcS1mZS5oIHdpbGwgbm93IHVuaGVscGZ1bGx5IGdldCByaWQgb2YgaXQuIFRoaXMKZG9lc24n dCBzZWVtIHRvbyBmYXItZmV0Y2hlZCwgZ2l2ZW4gaXRzIHByb3hpbWl0eSB0byBleGlzdGluZyBQ T1NJWAptYWNybyBuYW1lcy4KCkFkZCBhIFBRXyBwcmVmaXggdG8gYXZvaWQgY29sbGlzaW9ucywg YW5kIGJhY2twYXRjaC4KCkJhY2twYXRjaC10aHJvdWdoOiAxOAotLS0KIGRvYy9zcmMvc2dtbC9s aWJwcS5zZ21sICAgICAgICAgfCAyICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5o IHwgOCArKysrLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvbGlicHEuc2dtbAppbmRleCA3YWI2NzlhNzY1ZC4uNDVlYWRjNGRlN2UgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sCkBA IC0xMDQyNSw3ICsxMDQyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBHb2F1dGhCZWFyZXJSZXF1ZXN0 CiAgICAgLyogQ2FsbGJhY2sgaW1wbGVtZW50aW5nIGEgY3VzdG9tIGFzeW5jaHJvbm91cyBPQXV0 aCBmbG93LiAqLwogICAgIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgKCphc3luYykgKFBHY29u biAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg UEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU09DS1RZUEUgKmFsdHNvY2spOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBRX1NPQ0tUWVBFICphbHRzb2NrKTsKIAogICAgIC8qIENhbGxi YWNrIHRvIGNsZWFuIHVwIGN1c3RvbSBhbGxvY2F0aW9ucy4gKi8KICAgICB2b2lkICAgICAgICAo KmNsZWFudXApIChQR2Nvbm4gKmNvbm4sIHN0cnVjdCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVx dWVzdCk7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaAppbmRleCAwODUyNTg0ZWRhZS4uMjllZTBjOGE0 ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaApAQCAtNzQwLDkgKzc0MCw5IEBAIHR5cGVkZWYg c3RydWN0IF9QR3Byb21wdE9BdXRoRGV2aWNlCiAKIC8qIGZvciBQR29hdXRoQmVhcmVyUmVxdWVz dC5hc3luYygpICovCiAjaWZkZWYgX1dJTjMyCi0jZGVmaW5lIFNPQ0tUWVBFIHVpbnRwdHJfdAkJ LyogYXZvaWRzIGRlcGVuZGluZyBvbiB3aW5zb2NrMi5oIGZvciBTT0NLRVQgKi8KKyNkZWZpbmUg UFFfU09DS1RZUEUgdWludHB0cl90CS8qIGF2b2lkcyBkZXBlbmRpbmcgb24gd2luc29jazIuaCBm b3IgU09DS0VUICovCiAjZWxzZQotI2RlZmluZSBTT0NLVFlQRSBpbnQKKyNkZWZpbmUgUFFfU09D S1RZUEUgaW50CiAjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgUEdvYXV0aEJlYXJlclJlcXVlc3QK QEAgLTc3MSw3ICs3NzEsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR29hdXRoQmVhcmVyUmVxdWVzdAog CSAqLwogCVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgKCphc3luYykgKFBHY29ubiAqY29ubiwK IAkJCQkJCQkJCQlzdHJ1Y3QgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcXVlc3QsCi0JCQkJCQkJ CQkJU09DS1RZUEUgKiBhbHRzb2NrKTsKKwkJCQkJCQkJCQlQUV9TT0NLVFlQRSAqIGFsdHNvY2sp OwogCiAJLyoKIAkgKiBDYWxsYmFjayB0byBjbGVhbiB1cCBjdXN0b20gYWxsb2NhdGlvbnMuIEEg aG9vayBpbXBsZW1lbnRhdGlvbiBtYXkgdXNlCkBAIC03OTgsNyArNzk4LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgUEdvYXV0aEJlYXJlclJlcXVlc3QKIAl2b2lkCSAgICp1c2VyOwogfSBQR29hdXRoQmVh cmVyUmVxdWVzdDsKIAotI3VuZGVmIFNPQ0tUWVBFCisjdW5kZWYgUFFfU09DS1RZUEUKIAogZXh0 ZXJuIGNoYXIgKlBRZW5jcnlwdFBhc3N3b3JkKGNvbnN0IGNoYXIgKnBhc3N3ZCwgY29uc3QgY2hh ciAqdXNlcik7CiBleHRlcm4gY2hhciAqUFFlbmNyeXB0UGFzc3dvcmRDb25uKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqcGFzc3dkLCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICphbGdv cml0aG0pOwotLSAKMi4zNC4xCgo= --000000000000341f9f06458b36fb Content-Type: application/octet-stream; name="0002-libpq-oauth-use-correct-c_args-in-meson.build.patch" Content-Disposition: attachment; filename="0002-libpq-oauth-use-correct-c_args-in-meson.build.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miz1s2qm1 RnJvbSAzYjU2OTBhNDlkN2RjMzY1MjRiZDNlNjlmZWZiMTVmZDhiMDA1ZTYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDA4OjU1OjUxIC0wODAwClN1YmplY3Q6 IFtQQVRDSCAyLzddIGxpYnBxLW9hdXRoOiB1c2UgY29ycmVjdCBjX2FyZ3MgaW4gbWVzb24uYnVp bGQKCkNvcHktcGFzdGUgYnVnIGZyb20gYjA2MzViZmRhOiBsaWJwcS1vYXV0aC5zbyB3YXMgYmVp bmcgYnVpbHQgd2l0aApsaWJwcV9zb19jX2FyZ3MsIHJhdGhlciB0aGFuIGxpYnBxX29hdXRoX3Nv X2NfYXJncy4gKEF0IHRoZSBtb21lbnQsIHRoZQp0d28gbGlzdHMgYXJlIGlkZW50aWNhbCwgYnV0 IHRoYXQgd29uJ3QgYmUgdHJ1ZSBmb3JldmVyLikKCkJhY2twYXRjaC10aHJvdWdoOiAxOAotLS0K IHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIHwgMiArLQogMSBmaWxlIGNo YW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1v YXV0aC9tZXNvbi5idWlsZAppbmRleCA1MDVlMTY3MWI4Ni4uODgxZTNmMjRmMTAgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkCkBAIC00MCw3ICs0MCw3IEBAIGxpYnBxX29h dXRoX25hbWUgPSAnbGlicHEtb2F1dGgtQDBAJy5mb3JtYXQocGdfdmVyc2lvbl9tYWpvcikKIGxp YnBxX29hdXRoX3NvID0gc2hhcmVkX21vZHVsZShsaWJwcV9vYXV0aF9uYW1lLAogICBsaWJwcV9v YXV0aF9zb3VyY2VzICsgbGlicHFfb2F1dGhfc29fc291cmNlcywKICAgaW5jbHVkZV9kaXJlY3Rv cmllczogW2xpYnBxX29hdXRoX2luYywgcG9zdGdyZXNfaW5jXSwKLSAgY19hcmdzOiBsaWJwcV9z b19jX2FyZ3MsCisgIGNfYXJnczogbGlicHFfb2F1dGhfc29fY19hcmdzLAogICBjX3BjaDogcGNo X3Bvc3RncmVzX2ZlX2gsCiAgIGRlcGVuZGVuY2llczogW2Zyb250ZW5kX3NobGliX2NvZGUsIGxp YnBxLCBsaWJwcV9vYXV0aF9kZXBzXSwKICAgbGlua19kZXBlbmRzOiBleHBvcnRfZmlsZSwKLS0g CjIuMzQuMQoK --000000000000341f9f06458b36fb Content-Type: application/octet-stream; name="0003-oauth_validator-Avoid-races-in-log_check.patch" Content-Disposition: attachment; filename="0003-oauth_validator-Avoid-races-in-log_check.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miz1s4ga2 RnJvbSA0OTMzZTliNTNmYjU2ZjQwYjdkMzdmNmY4MDViNGQ0ZWIxNzc5MWJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCA0IERlYyAyMDI1IDE2OjM0OjA5IC0wODAwClN1YmplY3Q6 IFtQQVRDSCAzLzddIG9hdXRoX3ZhbGlkYXRvcjogQXZvaWQgcmFjZXMgaW4gbG9nX2NoZWNrKCkK CkNvbW1pdCBlMGYzNzNlZTQgZml4ZWQgdXAgcmFjZXMgaW4gQ2x1c3Rlcjo6Y29ubmVjdF9mYWls cyB3aGVuIHVzaW5nCmxvZ19saWtlLiB0LzAwMl9jbGllbnQucGwgZGlkbid0IGdldCB0aGUgbWVt bywgdGhvdWdoLCBiZWNhdXNlIGl0CmRvZXNuJ3QgdXNlIFRlc3Q6OkNsdXN0ZXIgdG8gcGVyZm9y bSBpdHMgY3VzdG9tIGhvb2sgdGVzdHMuIEludHJvZHVjZQp0aGUgZml4LCBiYXNlZCBvbiBkZWJ1 ZzIgbG9nZ2luZywgdG8gaXRzIHVzZSBvZiBsb2dfY2hlY2soKSBhcyB3ZWxsLCBhbmQKbW92ZSB0 aGUgbG9naWMgaW50byB0aGUgdGVzdCgpIGhlbHBlciBzbyB0aGF0IGFueSBhZGRpdGlvbnMgZG9u J3QgbmVlZAp0byBjb250aW51YWxseSBkdXBsaWNhdGUgaXQuCgpCYWNrcGF0Y2gtdGhyb3VnaDog MTgKLS0tCiAuLi4vbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsICAgfCAy NCArKysrKysrKysrKysrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwg NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlk YXRvci90LzAwMl9jbGllbnQucGwgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90 LzAwMl9jbGllbnQucGwKaW5kZXggYWFjMDIyMGQyMTUuLmU2YzkxZmM5MTFjIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsCkBAIC0yOSw2 ICsyOSw4IEBAICRub2RlLT5pbml0OwogJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCAibG9nX2Nvbm5lY3Rpb25zID0gYWxsXG4iKTsKICRub2RlLT5hcHBlbmRfY29uZigncG9z dGdyZXNxbC5jb25mJywKIAkib2F1dGhfdmFsaWRhdG9yX2xpYnJhcmllcyA9ICd2YWxpZGF0b3In XG4iKTsKKyMgTmVlZGVkIHRvIGluc3BlY3QgcG9zdG1hc3RlciBsb2cgYWZ0ZXIgY29ubmVjdGlv biBmYWlsdXJlOgorJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21p bl9tZXNzYWdlcyA9IGRlYnVnMiIpOwogJG5vZGUtPnN0YXJ0OwogCiAkbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICdDUkVBVEUgVVNFUiB0ZXN0OycpOwpAQCAtNDcsNyArNDksNyBAQCBsb2Nh bCBhbGwgdGVzdCBvYXV0aCBpc3N1ZXI9IiRpc3N1ZXIiIHNjb3BlPSIkc2NvcGUiCiB9KTsKICRu b2RlLT5yZWxvYWQ7CiAKLW15ICRsb2dfc3RhcnQgPSAkbm9kZS0+d2FpdF9mb3JfbG9nKHFyL3Jl bG9hZGluZyBjb25maWd1cmF0aW9uIGZpbGVzLyk7Ciskbm9kZS0+d2FpdF9mb3JfbG9nKHFyL3Jl bG9hZGluZyBjb25maWd1cmF0aW9uIGZpbGVzLyk7CiAKICRFTlZ7UEdPQVVUSERFQlVHfSA9ICJV TlNBRkUiOwogCkBAIC03Myw2ICs3NSw3IEBAIHN1YiB0ZXN0CiAJbXkgQGNtZCA9ICgib2F1dGhf aG9va19jbGllbnQiLCBAeyRmbGFnc30sICRjb21tb25fY29ubnN0cik7CiAJbm90ZSAicnVubmlu ZyAnIiAuIGpvaW4oIicgJyIsIEBjbWQpIC4gIiciOwogCisJbXkgJGxvZ19zdGFydCA9IC1zICRu b2RlLT5sb2dmaWxlOwogCW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9IHJ1bl9jb21tYW5kKFxAY21k KTsKIAogCWlmIChkZWZpbmVkKCRwYXJhbXN7ZXhwZWN0ZWRfc3Rkb3V0fSkpCkBAIC04OCw2ICs5 MSwxOCBAQCBzdWIgdGVzdAogCXsKIAkJaXMoJHN0ZGVyciwgIiIsICIkdGVzdF9uYW1lOiBubyBz dGRlcnIiKTsKIAl9CisKKwlpZiAoZGVmaW5lZCgkcGFyYW1ze2xvZ19saWtlfSkpCisJeworCQkj IFNlZSBDbHVzdGVyOjpjb25uZWN0X2ZhaWxzKCkuIFRvIGF2b2lkIHJhY2VzLCB3ZSBoYXZlIHRv IHdhaXQgZm9yIHRoZQorCQkjIHBvc3RtYXN0ZXIgdG8gZmx1c2ggdGhlIGxvZyBmb3IgdGhlIGZp bmlzaGVkIGNvbm5lY3Rpb24uCisJCSRub2RlLT53YWl0X2Zvcl9sb2coCisJCQlxci9ERUJVRzog ICg/OjAwMDAwOiApP2ZvcmtlZCBuZXcgY2xpZW50IGJhY2tlbmQsIHBpZD0oXGQrKSBzb2NrZXQu KkRFQlVHOiAgKD86MDAwMDA6ICk/Y2xpZW50IGJhY2tlbmQgXChQSUQgXDFcKSBleGl0ZWQgd2l0 aCBleGl0IGNvZGUgXGQvcywKKwkJCSRsb2dfc3RhcnQpOworCisJCSRub2RlLT5sb2dfY2hlY2so IiR0ZXN0X25hbWU6IGxvZyBtYXRjaGVzIiwKKwkJCSRsb2dfc3RhcnQsIGxvZ19saWtlID0+ICRw YXJhbXN7bG9nX2xpa2V9KTsKKwl9CiB9CiAKIHRlc3QoCkBAIC05NywxMSArMTEyLDggQEAgdGVz dCgKIAkJIi0tZXhwZWN0ZWQtdXJpIiwgIiRpc3N1ZXIvLndlbGwta25vd24vb3BlbmlkLWNvbmZp Z3VyYXRpb24iLAogCQkiLS1leHBlY3RlZC1zY29wZSIsICRzY29wZSwKIAldLAotCWV4cGVjdGVk X3N0ZG91dCA9PiBxci9jb25uZWN0aW9uIHN1Y2NlZWRlZC8pOwotCi0kbm9kZS0+bG9nX2NoZWNr KCJ2YWxpZGF0b3IgcmVjZWl2ZXMgY29ycmVjdCB0b2tlbiIsCi0JJGxvZ19zdGFydCwKLQlsb2df bGlrZSA9PiBbIHFyL29hdXRoX3ZhbGlkYXRvcjogdG9rZW49Im15LXRva2VuIiwgcm9sZT0iJHVz ZXIiLywgXSk7CisJZXhwZWN0ZWRfc3Rkb3V0ID0+IHFyL2Nvbm5lY3Rpb24gc3VjY2VlZGVkLywK Kwlsb2dfbGlrZSA9PiBbcXIvb2F1dGhfdmFsaWRhdG9yOiB0b2tlbj0ibXktdG9rZW4iLCByb2xl PSIkdXNlciIvXSk7CiAKIGlmICgkRU5We3dpdGhfbGliY3VybH0gbmUgJ3llcycpCiB7Ci0tIAoy LjM0LjEKCg== --000000000000341f9f06458b36fb Content-Type: application/octet-stream; name="0004-libpq-Introduce-PQAUTHDATA_OAUTH_BEARER_TOKEN_V2.patch" Content-Disposition: attachment; filename="0004-libpq-Introduce-PQAUTHDATA_OAUTH_BEARER_TOKEN_V2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miz1s6l93 RnJvbSBiMmNlY2U1MmJhNjhhODNiNmVjZGJkYTZjNWM0NWQ0YWViMGI2NmFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogTW9uLCAxIERlYyAyMDI1IDE1OjA3OjI2IC0wODAwClN1YmplY3Q6 IFtQQVRDSCA0LzddIGxpYnBxOiBJbnRyb2R1Y2UgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9L RU5fVjIKCkZvciB0aGUgbGlicHEtb2F1dGggbW9kdWxlIHRvIGV2ZW50dWFsbHkgbWFrZSB1c2Ug b2YgdGhlClBHb2F1dGhCZWFyZXJSZXF1ZXN0IEFQSSwgaXQgbmVlZHMgc29tZSBhZGRpdGlvbmFs IGZ1bmN0aW9uYWxpdHk6IHRoZQpkZXJpdmVkIElzc3VlciBJRCBmb3IgdGhlIGF1dGhvcml6YXRp b24gc2VydmVyIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5CmxpYnBxLCBhbmQgZXJyb3IgbWVzc2Fn ZXMgbmVlZCB0byBiZSBidWlsdCB3aXRob3V0IHJlbHlpbmcgb24gUEdjb25uCmludGVybmFscy4g VGhlc2UgZmVhdHVyZXMgc2VlbSB1c2VmdWwgZm9yIGFwcGxpY2F0aW9uIGhvb2tzLCB0b28sIHNv CnRoYXQgdGhleSBkb24ndCBlYWNoIGhhdmUgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLgoKVGhlIG9y aWdpbmFsIHBsYW4gd2FzIGZvciBhZGRpdGlvbnMgdG8gUEdvYXV0aEJlYXJlclJlcXVlc3QgdG8g YmUgbWFkZQp3aXRob3V0IGEgdmVyc2lvbiBidW1wIHRvIHRoZSBQR2F1dGhEYXRhIHR5cGUsIGFu ZCB0aGF0IGFwcGxpY2F0aW9ucwp3b3VsZCBzaW1wbHkgY2hlY2sgYSBMSUJQUV9IQVNfKiBtYWNy byBhdCBjb21waWxlIHRpbWUgdG8gZGVjaWRlIHdoZXRoZXIKdGhleSBjb3VsZCB1c2UgdGhlIG5l dyBmZWF0dXJlcy4gVGhhdCB0aGVvcmV0aWNhbGx5IHdvcmtzIGZvcgphcHBsaWNhdGlvbnMgbGlu a2VkIGFnYWluc3QgbGlicHEsIHNpbmNlIGl0J3Mgbm90IHNhZmUgdG8gZG93bmdyYWRlCmxpYnBx IGZyb20gdGhlIHZlcnNpb24geW91J3ZlIGNvbXBpbGVkIGFnYWluc3QuCgpUaGF0IHN0cmF0ZWd5 IHdvbid0IHdvcmsgZm9yIHBsdWdpbnMsIHRob3VnaCwgZHVlIHRvIGEgY29tcGxpY2F0aW9uCmZp cnN0IG5vdGljZWQgZHVyaW5nIHRoZSBsaWJwcS1vYXV0aCBtb2R1bGUgc3BsaXQ6IGl0J3Mgbm9y bWFsIGZvciBhCnBsdWdpbiBvbiBkaXNrIHRvIGJlICpuZXdlciogdGhhbiB0aGUgbGlicHEgdGhh dCdzIGxvYWRpbmcgaXQsIGJlY2F1c2UKeW91IG1pZ2h0IGhhdmUgdXBncmFkZWQgeW91ciBpbnN0 YWxsYXRpb24gd2hpbGUgYW4gYXBwbGljYXRpb24gd2FzCnJ1bm5pbmcuIChQdXQgYW5vdGhlciB3 YXk6IGEgcGx1Z2luIGFyY2hpdGVjdHVyZSBjYXVzZXMgdGhlIGNvbXBpbGUtdGltZQphbmQgcnVu LXRpbWUgZGVwZW5kZW5jeSBhcnJvd3MgdG8gcG9pbnQgaW4gb3Bwb3NpdGUgZGlyZWN0aW9ucywg c28KcGx1Z2lucyB3b24ndCBiZSBhYmxlIHRvIHJlbHkgb24gdGhlIExJQlBRX0hBU18qIG1hY3Jv cyB0byBkZXRlcm1pbmUKd2hhdCBBUElzIGFyZSBhdmFpbGFibGUgdG8gdGhlbS4pCgooVE9ETzog QXJlIHRoZXJlIGltcGxpY2F0aW9ucyBmb3Igb3VyIHVzZSBvZiBSVExEX05PVyBhdCBkbG9wZW4o KSB0aW1lPwpDYW4gdGhpcyBiZSBpbXByb3ZlZD8pCgpJbnN0ZWFkLCBhZGQgYSBuZXcgc3RydWN0 IHdoaWNoIGV4dGVuZHMgdGhlICJ2MSIgUEdvYXV0aEJlYXJlclJlcXVlc3QuCldoZW4gYW4gYXBw bGljYXRpb24gaG9vayByZWNlaXZlcyBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMiwg aXQKbWF5IHNhZmVseSBkb3duY2FzdCB0aGUgcmVxdWVzdCBwb2ludGVyIGl0IHJlY2VpdmVzIGlu IGl0cyBjYWxsYmFja3MgdG8KbWFrZSB1c2Ugb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBsaWJw cSB3aWxsIGZpcnN0IHRyeSB0aGUgbmV3IHZlcnNpb24sCnRoZW4gZmFsbCBiYWNrIHRvIHRoZSBv bGQgYmVmb3JlIGdpdmluZyB1cC4KClRPRE86IEVycm9yIGhhbmRsaW5nIGludHJvZHVjZXMgYSBk ZXBlbmRlbmN5IG9uIHBxZXhwYnVmZmVyLmgsIHdoaWNoIGlzCiAgICAgIHRlY2huaWNhbGx5IGNv bnNpZGVyZWQgaW50ZXJuYWwuLi4gYnV0IHdlIGV4cG9ydCB0aGUgQUJJIGZvciBwc3FsLAogICAg ICBzbyBpcyBpdCByZWFsbHkgaW50ZXJuYWwgYXQgdGhpcyBwb2ludD8KVE9ETzogQ291bGQgd2Ug anVzdCBhZGQgdG8gdGhlIGVuZCBvZiBQR29hdXRoQmVhcmVyUmVxdWVzdCwgYW5kIHRlbGwKICAg ICAgdXNlcnMgbm90IHRvIHVzZSB0aGUgYWRkaXRpb25hbCBmaWVsZHMgaWYgdGhleSBoYXZlIHZl cnNpb24gMT8KLS0tCiBkb2Mvc3JjL3NnbWwvbGlicHEuc2dtbCAgICAgICAgICAgICAgICAgICAg ICAgfCAgODcgKysrKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCAg ICAgICAgICAgICAgIHwgIDMyICsrKysrLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1v YXV0aC5jICAgICAgICAgIHwgMTA0ICsrKysrKysrKysrKystLS0tLQogLi4uL29hdXRoX3ZhbGlk YXRvci9vYXV0aF9ob29rX2NsaWVudC5jICAgICAgIHwgIDk3ICsrKysrKysrKysrKysrKy0KIC4u Li9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwgICB8ICAzOCArKysrKyst CiA2IGZpbGVzIGNoYW5nZWQsIDMyNCBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbCBiL2RvYy9zcmMvc2dtbC9saWJwcS5z Z21sCmluZGV4IDQ1ZWFkYzRkZTdlLi5iYWY4ZWY0ZDNkMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2xpYnBxLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwKQEAgLTEwMzUwLDYg KzEwMzUwLDcgQEAgUFFhdXRoRGF0YUhvb2tfdHlwZSBQUWdldEF1dGhEYXRhSG9vayh2b2lkKTsK ICAgICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5QUUFVVEhEQVRBX1BST01QVF9PQVVUSF9ERVZJ Q0U8L3ByaW1hcnk+PC9pbmRleHRlcm0+CiAgICAgICAgPC90ZXJtPgogICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgPHBhcmE+PGVtcGhhc2lzPkF2YWlsYWJsZSBpbiBQb3N0Z3JlU1FMIDE4IGFu ZCBsYXRlci48L2VtcGhhc2lzPjwvcGFyYT4KICAgICAgICAgPHBhcmE+CiAgICAgICAgICBSZXBs YWNlcyB0aGUgZGVmYXVsdCB1c2VyIHByb21wdCBkdXJpbmcgdGhlIGJ1aWx0aW4gZGV2aWNlCiAg ICAgICAgICBhdXRob3JpemF0aW9uIGNsaWVudCBmbG93LiA8cmVwbGFjZWFibGU+ZGF0YTwvcmVw bGFjZWFibGU+IHBvaW50cyB0bwpAQCAtMTA0MDIsNiArMTA0MDMsNyBAQCB0eXBlZGVmIHN0cnVj dCBfUEdwcm9tcHRPQXV0aERldmljZQogICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5PlBRQVVU SERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgogICAgICAgIDwv dGVybT4KICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPjxlbXBoYXNpcz5BdmFpbGFi bGUgaW4gUG9zdGdyZVNRTCAxOCBhbmQgbGF0ZXIuPC9lbXBoYXNpcz48L3BhcmE+CiAgICAgICAg IDxwYXJhPgogICAgICAgICAgQWRkcyBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBhIGZsb3cs IHJlcGxhY2luZyB0aGUgYnVpbHRpbiBmbG93IGlmCiAgICAgICAgICBpdCBpcyA8bGluayBsaW5r ZW5kPSJjb25maWd1cmUtb3B0aW9uLXdpdGgtbGliY3VybCI+aW5zdGFsbGVkPC9saW5rPi4KQEAg LTEwNDA5LDYgKzEwNDExLDEzIEBAIHR5cGVkZWYgc3RydWN0IF9QR3Byb21wdE9BdXRoRGV2aWNl CiAgICAgICAgICB1c2VyL2lzc3Vlci9zY29wZSBjb21iaW5hdGlvbiwgaWYgb25lIGlzIGF2YWls YWJsZSB3aXRob3V0IGJsb2NraW5nLCBvcgogICAgICAgICAgZWxzZSBzZXQgdXAgYW4gYXN5bmNo cm9ub3VzIGNhbGxiYWNrIHRvIHJldHJpZXZlIG9uZS4KICAgICAgICAgPC9wYXJhPgorICAgICAg ICA8bm90ZT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZvciA8cHJvZHVjdG5hbWU+UG9z dGdyZVNRTDwvcHJvZHVjdG5hbWU+IHJlbGVhc2VzIDE5IGFuZCBsYXRlciwKKyAgICAgICAgICBh cHBsaWNhdGlvbnMgc2hvdWxkIHByZWZlcgorICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImxpYnBx LW9hdXRoLWF1dGhkYXRhLW9hdXRoLWJlYXJlci10b2tlbi12MiI+PGxpdGVyYWw+UFFBVVRIREFU QV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI8L2xpdGVyYWw+PC9saW5rPi4KKyAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgPC9ub3RlPgogICAgICAgICA8cGFyYT4KICAgICAgICAgIDxyZXBsYWNlYWJs ZT5kYXRhPC9yZXBsYWNlYWJsZT4gcG9pbnRzIHRvIGFuIGluc3RhbmNlCiAgICAgICAgICBvZiA8 c3ltYm9sPlBHb2F1dGhCZWFyZXJSZXF1ZXN0PC9zeW1ib2w+LCB3aGljaCBzaG91bGQgYmUgZmls bGVkIGluCkBAIC0xMDUwMCw2ICsxMDUwOSw4NCBAQCB0eXBlZGVmIHN0cnVjdCBQR29hdXRoQmVh cmVyUmVxdWVzdAogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwv dmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1vYXV0aC1hdXRo ZGF0YS1vYXV0aC1iZWFyZXItdG9rZW4tdjIiPgorICAgICAgIDx0ZXJtPgorICAgICAgICA8c3lt Ym9sPlBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyPC9zeW1ib2w+CisgICAgICAgIDxp bmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5QUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tF Tl9WMjwvcHJpbWFyeT4KKyAgICAgICAgIDxzZWNvbmRhcnk+UFFBVVRIREFUQV9PQVVUSF9CRUFS RVJfVE9LRU48L3NlY29uZGFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgPC90ZXJt PgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+PGVtcGhhc2lzPkF2YWlsYWJsZSBp biBQb3N0Z3JlU1FMIDE5IGFuZCBsYXRlci48L2VtcGhhc2lzPjwvcGFyYT4KKyAgICAgICAgPHBh cmE+CisgICAgICAgICBQcm92aWRlcyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgb2YKKyAgICAgICAg IDxsaW5rIGxpbmtlbmQ9ImxpYnBxLW9hdXRoLWF1dGhkYXRhLW9hdXRoLWJlYXJlci10b2tlbiI+ PGxpdGVyYWw+UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU48L2xpdGVyYWw+PC9saW5rPiwK KyAgICAgICAgIGFuZCBhZGRzIHRoZSBhYmlsaXR5IHRvIHNldCBjdXN0b20gZXJyb3IgbWVzc2Fn ZXMgYW5kIGluc3BlY3QgdGhlCisgICAgICAgICBPQXV0aCBpc3N1ZXIgSUQgdGhhdCB0aGUgY2xp ZW50IGV4cGVjdHMgdG8gdXNlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgPHJlcGxhY2VhYmxlPmRhdGE8L3JlcGxhY2VhYmxlPiBwb2ludHMgdG8gYW4gaW5zdGFu Y2UKKyAgICAgICAgIG9mIDxzeW1ib2w+UEdvYXV0aEJlYXJlclJlcXVlc3RWMjwvc3ltYm9sPiwg d2hpY2ggc2hvdWxkIGJlIGZpbGxlZCBpbgorICAgICAgICAgYnkgdGhlIGltcGxlbWVudGF0aW9u OgorPHN5bm9wc2lzPgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQR29hdXRoQmVhcmVyUmVxdWVz dCB2MTsgICAgLyogc2VlIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVzdCBzdHJ1Y3QsIGFib3ZlICov CisKKyAgICAvKiBIb29rIGlucHV0cyAoY29uc3RhbnQgYWNyb3NzIGFsbCBjYWxscykgKi8KKyAg ICBjb25zdCBjaGFyICppc3N1ZXI7ICAgICAgICAgICAgLyogdGhlIGlzc3VlciBpZGVudGlmaWVy IChSRkMgOTIwNykgaW4gdXNlICovCisKKyAgICAvKiBIb29rIG91dHB1dHMgKi8KKworICAgIC8q IEFuIGluaXRpYWxpemVkLCBlbXB0eSBidWZmZXIgZm9yIHJlcG9ydGluZyBlcnJvcnMgd2hlbiB0 aGUgZmxvdyBmYWlscy4gKi8KKyAgICBzdHJ1Y3QgUFFFeHBCdWZmZXJEYXRhICplcnJvcjsKK30g UEdvYXV0aEJlYXJlclJlcXVlc3RWMjsKKzwvc3lub3BzaXM+CisgICAgICAgIDwvcGFyYT4KKyAg ICAgICAgPHBhcmE+CisgICAgICAgICBXaGVuIGEgPGxpdGVyYWw+UFFBVVRIREFUQV9PQVVUSF9C RUFSRVJfVE9LRU5fVjI8L2xpdGVyYWw+IGhvb2sgaXMgaW4KKyAgICAgICAgIHVzZSwgPGFwcGxp Y2F0aW9uPmxpYnBxPC9hcHBsaWNhdGlvbj4gYWRkaXRpb25hbGx5IGd1YXJhbnRlZXMgdGhhdCB0 aGUKKyAgICAgICAgIDxsaXRlcmFsPnJlcXVlc3Q8L2xpdGVyYWw+IHBvaW50ZXIgdGhhdCBpcyBw cm92aWRlZCB0byB0aGUKKyAgICAgICAgIDxyZXBsYWNlYWJsZT52MS5hc3luYzwvcmVwbGFjZWFi bGU+IGFuZCA8cmVwbGFjZWFibGU+djEuY2xlYW51cDwvcmVwbGFjZWFibGU+CisgICAgICAgICBj YWxsYmFja3MgbWF5IGJlIHNhZmVseSBjYXN0IHRvIDxsaXRlcmFsPihQR29hdXRoQmVhcmVyUmVx dWVzdFYyJm5ic3A7Kik8L2xpdGVyYWw+LgorICAgICAgICAgSW1wbGVtZW50YXRpb25zIG11c3Qg b3RoZXJ3aXNlIGZvbGxvdyB0aGUgdjEgQVBJLCBhcyBkZXNjcmliZWQgYWJvdmUsCisgICAgICAg ICB1c2luZyB0aGUgPHJlcGxhY2VhYmxlPnYxPC9yZXBsYWNlYWJsZT4gc3RydWN0IG1lbWJlci4K KyAgICAgICAgPC9wYXJhPgorICAgICAgICA8d2FybmluZz4KKyAgICAgICAgIDxwYXJhPgorICAg ICAgICAgIENhc3RpbmcgdG8gPGxpdGVyYWw+KFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjImbmJzcDsq KTwvbGl0ZXJhbD4gaXMKKyAgICAgICAgICA8ZW1waGFzaXM+b25seTwvZW1waGFzaXM+IHNhZmUg d2hlbiB0aGUgaG9vayB0eXBlIGlzCisgICAgICAgICAgPGxpdGVyYWw+UFFBVVRIREFUQV9PQVVU SF9CRUFSRVJfVE9LRU5fVjI8L2xpdGVyYWw+LiBBcHBsaWNhdGlvbnMgbWF5CisgICAgICAgICAg Y3Jhc2ggb3IgbWlzYmVoYXZlIGlmIGEgaG9vayBhdHRlbXB0cyB0byB1c2UgdjIgZmVhdHVyZXMg d2l0aCB0aGUgdjEKKyAgICAgICAgICBob29rIHR5cGUuCisgICAgICAgICA8L3BhcmE+CisgICAg ICAgIDwvd2FybmluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBJbiBhZGRpdGlvbiB0byB0 aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdmVyc2lvbiAxIEFQSSwgdGhlIHYyIHN0cnVjdAorICAg ICAgICAgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBpbnB1dCBhbmQgb3V0cHV0IGZvciB0aGUgaG9v azoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIDxyZXBsYWNlYWJs ZT5pc3N1ZXI8L3JlcGxhY2VhYmxlPiBjb250YWlucyB0aGUgaXNzdWVyIGlkZW50aWZpZXIsIGFz CisgICAgICAgICBkZWZpbmVkIGluIDx1bGluayB1cmw9Imh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0 Zi5vcmcvZG9jL2h0bWwvcmZjOTIwNyI+UkZDIDkyMDc8L3VsaW5rPiwKKyAgICAgICAgIHRoYXQg aXMgaW4gdXNlIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uLiBUaGlzIGlkZW50aWZpZXIgaXMK KyAgICAgICAgIGRldGVybWluZWQgYnkgPHhyZWYgbGlua2VuZD0ibGlicHEtY29ubmVjdC1vYXV0 aC1pc3N1ZXIiLz4uCisgICAgICAgICBUbyBhdm9pZCBtaXgtdXAgYXR0YWNrcywgY3VzdG9tIGZs b3dzIHNob3VsZCBlbnN1cmUgdGhhdCBhbnkgZGlzY292ZXJ5CisgICAgICAgICBtZXRhZGF0YSBw cm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWF0Y2hlcyB0aGlzIGlzc3VlciBJ RC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIDxyZXBsYWNlYWJs ZT5lcnJvcjwvcmVwbGFjZWFibGU+IGNvbnRhaW5zIGFuIGVtcHR5CisgICAgICAgICA8bGl0ZXJh bD5QUUV4cEJ1ZmZlcjwvbGl0ZXJhbD4gdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBj dXN0b20KKyAgICAgICAgIGVycm9yIG1lc3NhZ2Ugd2hlbiBhIGZsb3cgZmFpbHMuIFRoZSBtZXNz YWdlIHdpbGwgYmUgaW5jbHVkZWQgYXMgcGFydAorICAgICAgICAgb2YgPGxpbmsgbGlua2VuZD0i bGlicHEtUFFlcnJvck1lc3NhZ2UiPjxsaXRlcmFsPlBRZXJyb3JNZXNzYWdlKCk8L2xpdGVyYWw+ PC9saW5rPi4KKyAgICAgICAgIEhvb2tzIG11c3Qgbm90IGZyZWUgb3IgcmVhc3NpZ24gdGhpcyBi dWZmZXI7IGl0IGlzIG1hbmFnZWQgYnkKKyAgICAgICAgIDxhcHBsaWNhdGlvbj5saWJwcTwvYXBw bGljYXRpb24+LiBUaGUgQVBJIGZvciBtYW5pcHVsYXRpbmcgdGhlIGVycm9yCisgICAgICAgICBi dWZmZXIgaXMgcHJvdmlkZWQgaW4gPGxpdGVyYWw+ImludGVybmFsL3BxZXhwYnVmZmVyLmgiPC9s aXRlcmFsPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zh cmxpc3RlbnRyeT4KKwogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L3BhcmE+CiAgICA8L3Nl Y3QzPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjMWFkODBhNDE4ZC4uYmU4ZmUwYWMy MmIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xOTA2LDYgKzE5MDYsNyBAQCBQR2Rh dGFWYWx1ZQogUEdsb2JqZnVuY3MKIFBHbm90aWZ5CiBQR29hdXRoQmVhcmVyUmVxdWVzdAorUEdv YXV0aEJlYXJlclJlcXVlc3RWMgogUEdwaXBlbGluZVN0YXR1cwogUEdwcm9tcHRPQXV0aERldmlj ZQogUEdyZXNBdHREZXNjCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1m ZS5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaAppbmRleCAyOWVlMGM4YTRmZC4u OGY4Mzk3ODVmYTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgK KysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaApAQCAtNjMsNiArNjMsMTAgQEAg ZXh0ZXJuICJDIgogLyogSW5kaWNhdGVzIHByZXNlbmNlIG9mIHRoZSBQUUFVVEhEQVRBX1BST01Q VF9PQVVUSF9ERVZJQ0UgYXV0aGRhdGEgaG9vayAqLwogI2RlZmluZSBMSUJQUV9IQVNfUFJPTVBU X09BVVRIX0RFVklDRSAxCiAKKy8qIEZlYXR1cmVzIGFkZGVkIGluIFBvc3RncmVTUUwgdjE5OiAq LworLyogSW5kaWNhdGVzIHByZXNlbmNlIG9mIHRoZSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9U T0tFTl9WMiBhdXRoZGF0YSBob29rICovCisjZGVmaW5lIExJQlBRX0hBU19PQVVUSF9CRUFSRVJf VE9LRU5fVjIgMQorCiAvKgogICogT3B0aW9uIGZsYWdzIGZvciBQUWNvcHlSZXN1bHQKICAqLwpA QCAtMTkzLDcgKzE5Nyw5IEBAIHR5cGVkZWYgZW51bQogewogCVBRQVVUSERBVEFfUFJPTVBUX09B VVRIX0RFVklDRSwgLyogdXNlciBtdXN0IHZpc2l0IGEgZGV2aWNlLWF1dGhvcml6YXRpb24KIAkJ CQkJCQkJCSAqIFVSTCAqLwotCVBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOLAkvKiBzZXJ2 ZXIgcmVxdWVzdHMgYW4gT0F1dGggQmVhcmVyIHRva2VuICovCisJUFFBVVRIREFUQV9PQVVUSF9C RUFSRVJfVE9LRU4sCS8qIHNlcnZlciByZXF1ZXN0cyBhbiBPQXV0aCBCZWFyZXIgdG9rZW4KKwkJ CQkJCQkJCSAqIChwcmVmZXIgdjIsIGJlbG93LCBpbnN0ZWFkKSAqLworCVBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyLAkvKiBuZXdlc3QgQVBJIGZvciBPQXV0aCBCZWFyZXIgdG9rZW5z ICovCiB9IFBHYXV0aERhdGE7CiAKIC8qIFBHY29ubiBlbmNhcHN1bGF0ZXMgYSBjb25uZWN0aW9u IHRvIHRoZSBiYWNrZW5kLgpAQCAtNzI5LDYgKzczNSw3IEBAIGV4dGVybiBpbnQJUFFlbnYyZW5j b2Rpbmcodm9pZCk7CiAKIC8qID09PSBpbiBmZS1hdXRoLmMgPT09ICovCiAKKy8qIEF1dGhkYXRh IGZvciBQUUFVVEhEQVRBX1BST01QVF9PQVVUSF9ERVZJQ0UgKi8KIHR5cGVkZWYgc3RydWN0IF9Q R3Byb21wdE9BdXRoRGV2aWNlCiB7CiAJY29uc3QgY2hhciAqdmVyaWZpY2F0aW9uX3VyaTsJLyog dmVyaWZpY2F0aW9uIFVSSSB0byB2aXNpdCAqLwpAQCAtNzQ1LDYgKzc1Miw3IEBAIHR5cGVkZWYg c3RydWN0IF9QR3Byb21wdE9BdXRoRGV2aWNlCiAjZGVmaW5lIFBRX1NPQ0tUWVBFIGludAogI2Vu ZGlmCiAKKy8qIEF1dGhkYXRhIGZvciBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiAqLwog dHlwZWRlZiBzdHJ1Y3QgUEdvYXV0aEJlYXJlclJlcXVlc3QKIHsKIAkvKiBIb29rIGlucHV0cyAo Y29uc3RhbnQgYWNyb3NzIGFsbCBjYWxscykgKi8KQEAgLTgwMCw2ICs4MDgsMjggQEAgdHlwZWRl ZiBzdHJ1Y3QgUEdvYXV0aEJlYXJlclJlcXVlc3QKIAogI3VuZGVmIFBRX1NPQ0tUWVBFCiAKK3N0 cnVjdCBQUUV4cEJ1ZmZlckRhdGE7CQkJLyogc2VlIHBxZXhwYnVmZmVyLmggKi8KKworLyogQXV0 aGRhdGEgZm9yIFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyICovCit0eXBlZGVmIHN0 cnVjdAoreworCVBHb2F1dGhCZWFyZXJSZXF1ZXN0IHYxOwkvKiBzZWUgdGhlIFBHb2F1dGhCZWFy ZXJSZXF1ZXN0IHN0cnVjdCwgYWJvdmUgKi8KKworCS8qIEhvb2sgaW5wdXRzIChjb25zdGFudCBh Y3Jvc3MgYWxsIGNhbGxzKSAqLworCWNvbnN0IGNoYXIgKmlzc3VlcjsJCQkvKiB0aGUgaXNzdWVy IGlkZW50aWZpZXIgKFJGQyA5MjA3KSBpbiB1c2UsIGFzCisJCQkJCQkJCSAqIGRlcml2ZWQgZnJv bSB0aGUgY29ubmVjdGlvbidzIG9hdXRoX2lzc3VlciAqLworCisJLyogSG9vayBvdXRwdXRzICov CisKKwkvKgorCSAqIEFuIGluaXRpYWxpemVkLCBlbXB0eSBidWZmZXIgZm9yIHJlcG9ydGluZyBl cnJvcnMgd2hlbiB0aGUgZmxvdyBmYWlscy4KKwkgKiBJbXBsZW1lbnRhdGlvbnMgbWF5IHVzZSB0 aGUgQVBJIGluIHBxZXhwYnVmZmVyLmggdG8gYnVpbGQgYSBjdXN0b20KKwkgKiBlcnJvciBkZXNj cmlwdGlvbi4gSXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgY29ubmVjdGlvbidzCisJICogUFFl cnJvck1lc3NhZ2UoKSBvdXRwdXQuCisJICovCisJc3RydWN0IFBRRXhwQnVmZmVyRGF0YSAqZXJy b3I7Cit9IFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjI7CisKIGV4dGVybiBjaGFyICpQUWVuY3J5cHRQ YXNzd29yZChjb25zdCBjaGFyICpwYXNzd2QsIGNvbnN0IGNoYXIgKnVzZXIpOwogZXh0ZXJuIGNo YXIgKlBRZW5jcnlwdFBhc3N3b3JkQ29ubihQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhc3N3 ZCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqYWxnb3JpdGhtKTsKIGV4dGVybiBQR3Jl c3VsdCAqUFFjaGFuZ2VQYXNzd29yZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXIsIGNv bnN0IGNoYXIgKnBhc3N3ZCk7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1h dXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKaW5kZXgg ZDE0NmM1ZjU2N2MuLjI2NWVjNDMwMzVhIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0 aC5jCkBAIC02NjgsNiArNjY4LDMyIEBAIGNsZWFudXA6CiAJcmV0dXJuIHN1Y2Nlc3M7CiB9CiAK Ky8qCisgKiBIZWxwZXIgZm9yIGhhbmRsaW5nIHVzZXIgZmxvdyBmYWlsdXJlcy4gSWYgdGhlIGlt cGxlbWVudGF0aW9uIHB1dCBhbnl0aGluZworICogaW50byByZXF1ZXN0LT5lcnJvciwgaXQncyBh ZGRlZCB0byBjb25uLT5lcnJvck1lc3NhZ2UgaGVyZS4KKyAqLworc3RhdGljIHZvaWQKK3JlcG9y dF91c2VyX2Zsb3dfZXJyb3IoUEdjb25uICpjb25uLCBjb25zdCBQR29hdXRoQmVhcmVyUmVxdWVz dFYyICpyZXF1ZXN0KQoreworCWNvbnN0IGNoYXIgKmVycm1zZyA9IE5VTEw7CisKKwlpZiAoUFFF eHBCdWZmZXJCcm9rZW4ocmVxdWVzdC0+ZXJyb3IpKQorCQllcnJtc2cgPSBsaWJwcV9nZXR0ZXh0 KCJvdXQgb2YgbWVtb3J5Iik7CisJZWxzZSBpZiAocmVxdWVzdC0+ZXJyb3ItPmxlbikKKwkJZXJy bXNnID0gcmVxdWVzdC0+ZXJyb3ItPmRhdGE7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29u bi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJIGxpYnBxX2dldHRleHQoInVzZXItZGVmaW5lZCBPQXV0 aCBmbG93IGZhaWxlZCIpKTsKKworCWlmIChlcnJtc2cpCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLCAiOiAiKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmNvbm4tPmVycm9yTWVzc2FnZSwgZXJybXNnKTsKKwl9CisKKwlhcHBlbmRQUUV4cEJ1ZmZlckNo YXIoJmNvbm4tPmVycm9yTWVzc2FnZSwgJ1xuJyk7Cit9CisKIC8qCiAgKiBDYWxsYmFjayBpbXBs ZW1lbnRhdGlvbiBvZiBjb25uLT5hc3luY19hdXRoKCkgZm9yIGEgdXNlci1kZWZpbmVkIE9BdXRo IGZsb3cuCiAgKiBEZWxlZ2F0ZXMgdGhlIHJldHJpZXZhbCBvZiB0aGUgdG9rZW4gdG8gdGhlIGFw cGxpY2F0aW9uJ3MgYXN5bmMgY2FsbGJhY2suCkBAIC02ODAsMjAgKzcwNiwyMyBAQCBzdGF0aWMg UG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZQogcnVuX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNv bm4pCiB7CiAJZmVfb2F1dGhfc3RhdGUgKnN0YXRlID0gY29ubi0+c2FzbF9zdGF0ZTsKLQlQR29h dXRoQmVhcmVyUmVxdWVzdCAqcmVxdWVzdCA9IHN0YXRlLT5hc3luY19jdHg7CisJUEdvYXV0aEJl YXJlclJlcXVlc3RWMiAqcmVxdWVzdCA9IHN0YXRlLT5hc3luY19jdHg7CiAJUG9zdGdyZXNQb2xs aW5nU3RhdHVzVHlwZSBzdGF0dXM7CiAKLQlpZiAoIXJlcXVlc3QtPmFzeW5jKQorCWlmICghcmVx dWVzdC0+djEuYXN5bmMpCiAJewogCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAogCQkJ CQkJCQkidXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgcHJvdmlkZWQgbmVpdGhlciBhIHRva2VuIG5v ciBhbiBhc3luYyBjYWxsYmFjayIpOwogCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CiAJ fQogCi0Jc3RhdHVzID0gcmVxdWVzdC0+YXN5bmMoY29ubiwgcmVxdWVzdCwgJmNvbm4tPmFsdHNv Y2spOworCXN0YXR1cyA9IHJlcXVlc3QtPnYxLmFzeW5jKGNvbm4sCisJCQkJCQkJICAgKFBHb2F1 dGhCZWFyZXJSZXF1ZXN0ICopIHJlcXVlc3QsCisJCQkJCQkJICAgJmNvbm4tPmFsdHNvY2spOwor CiAJaWYgKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX0ZBSUxFRCkKIAl7Ci0JCWxpYnBxX2FwcGVu ZF9jb25uX2Vycm9yKGNvbm4sICJ1c2VyLWRlZmluZWQgT0F1dGggZmxvdyBmYWlsZWQiKTsKKwkJ cmVwb3J0X3VzZXJfZmxvd19lcnJvcihjb25uLCByZXF1ZXN0KTsKIAkJcmV0dXJuIHN0YXR1czsK IAl9CiAJZWxzZSBpZiAoc3RhdHVzID09IFBHUkVTX1BPTExJTkdfT0spCkBAIC03MDMsMTQgKzcz MiwxNCBAQCBydW5fdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIAkJICogb250byB0aGUg b3JpZ2luYWwgc3RyaW5nLCBzaW5jZSBpdCBtYXkgbm90IGJlIHNhZmUgZm9yIHVzIHRvIGZyZWUo KQogCQkgKiBpdC4pCiAJCSAqLwotCQlpZiAoIXJlcXVlc3QtPnRva2VuKQorCQlpZiAoIXJlcXVl c3QtPnYxLnRva2VuKQogCQl7CiAJCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAogCQkJ CQkJCQkJInVzZXItZGVmaW5lZCBPQXV0aCBmbG93IGRpZCBub3QgcHJvdmlkZSBhIHRva2VuIik7 CiAJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CiAJCX0KIAotCQljb25uLT5vYXV0aF90 b2tlbiA9IHN0cmR1cChyZXF1ZXN0LT50b2tlbik7CisJCWNvbm4tPm9hdXRoX3Rva2VuID0gc3Ry ZHVwKHJlcXVlc3QtPnYxLnRva2VuKTsKIAkJaWYgKCFjb25uLT5vYXV0aF90b2tlbikKIAkJewog CQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgIm91dCBvZiBtZW1vcnkiKTsKQEAgLTcz MiwyMSArNzYxLDIzIEBAIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogfQogCiAv KgotICogQ2xlYW51cCBjYWxsYmFjayBmb3IgdGhlIGFzeW5jIHVzZXIgZmxvdy4gRGVsZWdhdGVz IG1vc3Qgb2YgaXRzIGpvYiB0byB0aGUKLSAqIHVzZXItcHJvdmlkZWQgY2xlYW51cCBpbXBsZW1l bnRhdGlvbiwgdGhlbiBkaXNjb25uZWN0cyB0aGUgYWx0c29jay4KKyAqIENsZWFudXAgY2FsbGJh Y2sgZm9yIHRoZSBhc3luYyB1c2VyIGZsb3cuIERlbGVnYXRlcyBtb3N0IG9mIGl0cyBqb2IgdG8K KyAqIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIuY2xlYW51cCgpLCB0aGVuIGRpc2Nvbm5lY3RzIHRo ZSBhbHRzb2NrIGFuZCBmcmVlcyB0aGUKKyAqIHJlcXVlc3QgaXRzZWxmLgogICovCiBzdGF0aWMg dm9pZAogY2xlYW51cF91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogewogCWZlX29hdXRo X3N0YXRlICpzdGF0ZSA9IGNvbm4tPnNhc2xfc3RhdGU7Ci0JUEdvYXV0aEJlYXJlclJlcXVlc3Qg KnJlcXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OworCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJl cXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OwogCiAJQXNzZXJ0KHJlcXVlc3QpOwogCi0JaWYgKHJl cXVlc3QtPmNsZWFudXApCi0JCXJlcXVlc3QtPmNsZWFudXAoY29ubiwgcmVxdWVzdCk7CisJaWYg KHJlcXVlc3QtPnYxLmNsZWFudXApCisJCXJlcXVlc3QtPnYxLmNsZWFudXAoY29ubiwgKFBHb2F1 dGhCZWFyZXJSZXF1ZXN0ICopIHJlcXVlc3QpOwogCWNvbm4tPmFsdHNvY2sgPSBQR0lOVkFMSURf U09DS0VUOwogCisJZGVzdHJveVBRRXhwQnVmZmVyKHJlcXVlc3QtPmVycm9yKTsKIAlmcmVlKHJl cXVlc3QpOwogCXN0YXRlLT5hc3luY19jdHggPSBOVUxMOwogfQpAQCAtOTY4LDggKzk5OSw4IEBA IHVzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAg KiB0b2tlbiBmb3IgcHJlc2VudGF0aW9uIHRvIHRoZSBzZXJ2ZXIuCiAgKgogICogSWYgdGhlIGFw cGxpY2F0aW9uIGhhcyByZWdpc3RlcmVkIGEgY3VzdG9tIGZsb3cgaGFuZGxlciB1c2luZwotICog UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4sIGl0IG1heSBlaXRoZXIgcmV0dXJuIGEgdG9r ZW4gaW1tZWRpYXRlbHkgKGUuZy4KLSAqIGlmIGl0IGhhcyBvbmUgY2FjaGVkIGZvciBpbW1lZGlh dGUgdXNlKSwgb3Igc2V0IHVwIGZvciBhIHNlcmllcyBvZgorICogUFFBVVRIREFUQV9PQVVUSF9C RUFSRVJfVE9LRU5bX1YyXSwgaXQgbWF5IGVpdGhlciByZXR1cm4gYSB0b2tlbiBpbW1lZGlhdGVs eQorICogKGUuZy4gaWYgaXQgaGFzIG9uZSBjYWNoZWQgZm9yIGltbWVkaWF0ZSB1c2UpLCBvciBz ZXQgdXAgZm9yIGEgc2VyaWVzIG9mCiAgKiBhc3luY2hyb25vdXMgY2FsbGJhY2tzIHdoaWNoIHdp bGwgYmUgbWFuYWdlZCBieSBydW5fdXNlcl9vYXV0aF9mbG93KCkuCiAgKgogICogSWYgdGhlIGRl ZmF1bHQgaGFuZGxlciBpcyB1c2VkIGluc3RlYWQsIGEgRGV2aWNlIEF1dGhvcml6YXRpb24gZmxv dyBpcyB1c2VkCkBAIC05ODMsMjcgKzEwMTQsNDQgQEAgc3RhdGljIGJvb2wKIHNldHVwX3Rva2Vu X3JlcXVlc3QoUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiB7CiAJaW50CQkJ cmVzOwotCVBHb2F1dGhCZWFyZXJSZXF1ZXN0IHJlcXVlc3QgPSB7Ci0JCS5vcGVuaWRfY29uZmln dXJhdGlvbiA9IGNvbm4tPm9hdXRoX2Rpc2NvdmVyeV91cmksCi0JCS5zY29wZSA9IGNvbm4tPm9h dXRoX3Njb3BlLAorCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgcmVxdWVzdCA9IHsKKwkJLnYxID0g eworCQkJLm9wZW5pZF9jb25maWd1cmF0aW9uID0gY29ubi0+b2F1dGhfZGlzY292ZXJ5X3VyaSwK KwkJCS5zY29wZSA9IGNvbm4tPm9hdXRoX3Njb3BlLAorCQl9LAorCQkuaXNzdWVyID0gY29ubi0+ b2F1dGhfaXNzdWVyX2lkLAorCQkuZXJyb3IgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpLAogCX07CiAK LQlBc3NlcnQocmVxdWVzdC5vcGVuaWRfY29uZmlndXJhdGlvbik7CisJQXNzZXJ0KHJlcXVlc3Qu djEub3BlbmlkX2NvbmZpZ3VyYXRpb24pOworCUFzc2VydChyZXF1ZXN0Lmlzc3Vlcik7CisKKwlp ZiAoUFFFeHBCdWZmZXJCcm9rZW4ocmVxdWVzdC5lcnJvcikpCisJeworCQlsaWJwcV9hcHBlbmRf Y29ubl9lcnJvcihjb25uLCAib3V0IG9mIG1lbW9yeSIpOworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJLyoKKwkgKiBUaGUgY2xpZW50IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhlIE9BdXRoIGZsb3cu IFRyeSB0aGUgdjIgaG9vayBmaXJzdCwKKwkgKiB0aGVuIGZhbGwgYmFjayB0byB0aGUgdjEgaW1w bGVtZW50YXRpb24uCisJICovCisJcmVzID0gUFFhdXRoRGF0YUhvb2soUFFBVVRIREFUQV9PQVVU SF9CRUFSRVJfVE9LRU5fVjIsIGNvbm4sICZyZXF1ZXN0KTsKKwlpZiAocmVzID09IDApCisJCXJl cyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOLCBjb25uLCAm cmVxdWVzdCk7CiAKLQkvKiBUaGUgY2xpZW50IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhlIE9BdXRo IGZsb3cuICovCi0JcmVzID0gUFFhdXRoRGF0YUhvb2soUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU4sIGNvbm4sICZyZXF1ZXN0KTsKIAlpZiAocmVzID4gMCkKIAl7Ci0JCVBHb2F1dGhCZWFy ZXJSZXF1ZXN0ICpyZXF1ZXN0X2NvcHk7CisJCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVl c3RfY29weTsKIAotCQlpZiAocmVxdWVzdC50b2tlbikKKwkJaWYgKHJlcXVlc3QudjEudG9rZW4p CiAJCXsKIAkJCS8qCiAJCQkgKiBXZSBhbHJlYWR5IGhhdmUgYSB0b2tlbiwgc28gY29weSBpdCBp bnRvIHRoZSBjb25uLiAoV2UgY2FuJ3QKIAkJCSAqIGhvbGQgb250byB0aGUgb3JpZ2luYWwgc3Ry aW5nLCBzaW5jZSBpdCBtYXkgbm90IGJlIHNhZmUgZm9yIHVzCiAJCQkgKiB0byBmcmVlKCkgaXQu KQogCQkJICovCi0JCQljb25uLT5vYXV0aF90b2tlbiA9IHN0cmR1cChyZXF1ZXN0LnRva2VuKTsK KwkJCWNvbm4tPm9hdXRoX3Rva2VuID0gc3RyZHVwKHJlcXVlc3QudjEudG9rZW4pOwogCQkJaWYg KCFjb25uLT5vYXV0aF90b2tlbikKIAkJCXsKIAkJCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihj b25uLCAib3V0IG9mIG1lbW9yeSIpOwpAQCAtMTAxMSw4ICsxMDU5LDkgQEAgc2V0dXBfdG9rZW5f cmVxdWVzdChQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkJCX0KIAogCQkJ Lyogc2hvcnQtY2lyY3VpdCAqLwotCQkJaWYgKHJlcXVlc3QuY2xlYW51cCkKLQkJCQlyZXF1ZXN0 LmNsZWFudXAoY29ubiwgJnJlcXVlc3QpOworCQkJaWYgKHJlcXVlc3QudjEuY2xlYW51cCkKKwkJ CQlyZXF1ZXN0LnYxLmNsZWFudXAoY29ubiwgKFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICopICZyZXF1 ZXN0KTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihyZXF1ZXN0LmVycm9yKTsKIAkJCXJldHVybiB0 cnVlOwogCQl9CiAKQEAgLTEwMzEsNyArMTA4MCw3IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdj b25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAJfQogCWVsc2UgaWYgKHJlcyA8IDAp CiAJewotCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLCAidXNlci1kZWZpbmVkIE9BdXRo IGZsb3cgZmFpbGVkIik7CisJCXJlcG9ydF91c2VyX2Zsb3dfZXJyb3IoY29ubiwgJnJlcXVlc3Qp OwogCQlnb3RvIGZhaWw7CiAJfQogCWVsc2UgaWYgKCF1c2VfYnVpbHRpbl9mbG93KGNvbm4sIHN0 YXRlKSkKQEAgLTEwNDMsOCArMTA5Miw5IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25uICpj b25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAJcmV0dXJuIHRydWU7CiAKIGZhaWw6Ci0JaWYg KHJlcXVlc3QuY2xlYW51cCkKLQkJcmVxdWVzdC5jbGVhbnVwKGNvbm4sICZyZXF1ZXN0KTsKKwlp ZiAocmVxdWVzdC52MS5jbGVhbnVwKQorCQlyZXF1ZXN0LnYxLmNsZWFudXAoY29ubiwgKFBHb2F1 dGhCZWFyZXJSZXF1ZXN0ICopICZyZXF1ZXN0KTsKKwlkZXN0cm95UFFFeHBCdWZmZXIocmVxdWVz dC5lcnJvcik7CiAJcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jIGIvc3JjL3Rlc3QvbW9kdWxl cy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9va19jbGllbnQuYwppbmRleCAxNWQwY2Y5MzhhOC4u YjFhM2IwMTQwNzkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9y L29hdXRoX2hvb2tfY2xpZW50LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0 b3Ivb2F1dGhfaG9va19jbGllbnQuYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjaW5jbHVkZSAiZ2V0 b3B0X2xvbmcuaCIKICNpbmNsdWRlICJsaWJwcS1mZS5oIgorI2luY2x1ZGUgInBxZXhwYnVmZmVy LmgiCiAKIHN0YXRpYyBpbnQJaGFuZGxlX2F1dGhfZGF0YShQR2F1dGhEYXRhIHR5cGUsIFBHY29u biAqY29ubiwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBh c3luY19jYihQR2Nvbm4gKmNvbm4sCkBAIC0zNiwxMyArMzcsMTYgQEAgdXNhZ2UoY2hhciAqYXJn dltdKQogCiAJcHJpbnRmKCJyZWNvZ25pemVkIGZsYWdzOlxuIik7CiAJcHJpbnRmKCIgIC1oLCAt LWhlbHAgICAgICAgICAgICAgIHNob3cgdGhpcyBtZXNzYWdlXG4iKTsKKwlwcmludGYoIiAgLXYg VkVSU0lPTiAgICAgICAgICAgICAgc2VsZWN0IHRoZSBob29rIEFQSSB2ZXJzaW9uIChkZWZhdWx0 IDIpXG4iKTsKIAlwcmludGYoIiAgLS1leHBlY3RlZC1zY29wZSBTQ09QRSAgZmFpbCBpZiByZWNl aXZlZCBzY29wZXMgZG8gbm90IG1hdGNoIFNDT1BFXG4iKTsKIAlwcmludGYoIiAgLS1leHBlY3Rl ZC11cmkgVVJJICAgICAgZmFpbCBpZiByZWNlaXZlZCBjb25maWd1cmF0aW9uIGxpbmsgZG9lcyBu b3QgbWF0Y2ggVVJJXG4iKTsKKwlwcmludGYoIiAgLS1leHBlY3RlZC1pc3N1ZXIgSVNTICAgZmFp bCBpZiByZWNlaXZlZCBpc3N1ZXIgZG9lcyBub3QgbWF0Y2ggSVNTICh2MiBvbmx5KVxuIik7CiAJ cHJpbnRmKCIgIC0tbWlzYmVoYXZlPU1PREUgICAgICAgIGhhdmUgdGhlIGhvb2sgZmFpbCByZXF1 aXJlZCBwb3N0Y29uZGl0aW9uc1xuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAo TU9ERXM6IG5vLWhvb2ssIGZhaWwtYXN5bmMsIG5vLXRva2VuLCBuby1zb2NrZXQpXG4iKTsKIAlw cmludGYoIiAgLS1uby1ob29rICAgICAgICAgICAgICAgZG9uJ3QgaW5zdGFsbCBPQXV0aCBob29r c1xuIik7CiAJcHJpbnRmKCIgIC0taGFuZy1mb3JldmVyICAgICAgICAgIGRvbid0IGV2ZXIgcmV0 dXJuIGEgdG9rZW4gKGNvbWJpbmUgd2l0aCBjb25uZWN0X3RpbWVvdXQpXG4iKTsKIAlwcmludGYo IiAgLS10b2tlbiBUT0tFTiAgICAgICAgICAgdXNlIHRoZSBwcm92aWRlZCBUT0tFTiB2YWx1ZVxu Iik7CisJcHJpbnRmKCIgIC0tZXJyb3IgRVJSTVNHICAgICAgICAgIGZhaWwgaW5zdGVhZCwgd2l0 aCB0aGUgZ2l2ZW4gRVJSTVNHICh2MiBvbmx5KVxuIik7CiAJcHJpbnRmKCIgIC0tc3RyZXNzLWFz eW5jICAgICAgICAgIGJ1c3ktbG9vcCBvbiBQUWNvbm5lY3RQb2xsIHJhdGhlciB0aGFuIHBvbGxp bmdcbiIpOwogfQogCkBAIC01MSw5ICs1NSwxMiBAQCBzdGF0aWMgYm9vbCBub19ob29rID0gZmFs c2U7CiBzdGF0aWMgYm9vbCBoYW5nX2ZvcmV2ZXIgPSBmYWxzZTsKIHN0YXRpYyBib29sIHN0cmVz c19hc3luYyA9IGZhbHNlOwogc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3VyaSA9IE5VTEw7 CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfaXNzdWVyID0gTlVMTDsKIHN0YXRpYyBjb25z dCBjaGFyICpleHBlY3RlZF9zY29wZSA9IE5VTEw7CiBzdGF0aWMgY29uc3QgY2hhciAqbWlzYmVo YXZlX21vZGUgPSBOVUxMOwogc3RhdGljIGNoYXIgKnRva2VuID0gTlVMTDsKK3N0YXRpYyBjaGFy ICplcnJtc2cgPSBOVUxMOworc3RhdGljIGludAlob29rX3ZlcnNpb24gPSBQUUFVVEhEQVRBX09B VVRIX0JFQVJFUl9UT0tFTl9WMjsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CkBAIC02OCw2ICs3NSw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyJoYW5n LWZvcmV2ZXIiLCBub19hcmd1bWVudCwgTlVMTCwgMTAwNH0sCiAJCXsibWlzYmVoYXZlIiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDV9LAogCQl7InN0cmVzcy1hc3luYyIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAxMDA2fSwKKwkJeyJleHBlY3RlZC1pc3N1ZXIiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgMTAwN30sCisJCXsiZXJyb3IiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAw OH0sCiAJCXswfQogCX07CiAKQEAgLTc1LDcgKzg0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCVBHY29ubgkgICAqY29ubjsKIAlpbnQJCQljOwogCi0Jd2hpbGUgKChjID0gZ2V0 b3B0X2xvbmcoYXJnYywgYXJndiwgImgiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkKKwl3 aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaHY6IiwgbG9uZ19vcHRpb25zLCBO VUxMKSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTgzLDYgKzkyLDE4IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQl1c2FnZShhcmd2KTsKIAkJCQlyZXR1cm4g MDsKIAorCQkJY2FzZSAndic6CisJCQkJaWYgKHN0cmNtcChvcHRhcmcsICIxIikgPT0gMCkKKwkJ CQkJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU47CisJCQkJZWxz ZSBpZiAoc3RyY21wKG9wdGFyZywgIjIiKSA9PSAwKQorCQkJCQlob29rX3ZlcnNpb24gPSBQUUFV VEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjsKKwkJCQllbHNlCisJCQkJeworCQkJCQl1c2Fn ZShhcmd2KTsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCQkJCWJyZWFrOworCiAJCQljYXNlIDEw MDA6CQkJLyogLS1leHBlY3RlZC1zY29wZSAqLwogCQkJCWV4cGVjdGVkX3Njb3BlID0gb3B0YXJn OwogCQkJCWJyZWFrOwpAQCAtMTExLDYgKzEzMiwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJCQkJc3RyZXNzX2FzeW5jID0gdHJ1ZTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSAx MDA3OgkJCS8qIC0tZXhwZWN0ZWQtaXNzdWVyICovCisJCQkJZXhwZWN0ZWRfaXNzdWVyID0gb3B0 YXJnOworCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDg6CQkJLyogLS1lcnJvciAqLworCQkJCWVy cm1zZyA9IG9wdGFyZzsKKwkJCQlicmVhazsKKwogCQkJZGVmYXVsdDoKIAkJCQl1c2FnZShhcmd2 KTsKIAkJCQlyZXR1cm4gMTsKQEAgLTE2NywxNiArMTk2LDI0IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAogLyoKICAqIFBRYXV0aERhdGFIb29rIGltcGxlbWVudGF0aW9uLiBSZXBs YWNlcyB0aGUgZGVmYXVsdCBjbGllbnQgZmxvdyBieSBoYW5kbGluZwotICogUFFBVVRIREFUQV9P QVVUSF9CRUFSRVJfVE9LRU4uCisgKiBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTltfVjJd LgogICovCiBzdGF0aWMgaW50CiBoYW5kbGVfYXV0aF9kYXRhKFBHYXV0aERhdGEgdHlwZSwgUEdj b25uICpjb25uLCB2b2lkICpkYXRhKQogewotCVBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEgPSBk YXRhOworCVBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXE7CisJUEdvYXV0aEJlYXJlclJlcXVlc3RW MiAqcmVxMiA9IE5VTEw7CisKKwlBc3NlcnQoaG9va192ZXJzaW9uID09IFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOIHx8CisJCSAgIGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRI X0JFQVJFUl9UT0tFTl9WMik7CiAKLQlpZiAobm9faG9vayB8fCAodHlwZSAhPSBQUUFVVEhEQVRB X09BVVRIX0JFQVJFUl9UT0tFTikpCisJaWYgKG5vX2hvb2sgfHwgdHlwZSAhPSBob29rX3ZlcnNp b24pCiAJCXJldHVybiAwOwogCisJcmVxID0gZGF0YTsKKwlpZiAodHlwZSA9PSBQUUFVVEhEQVRB X09BVVRIX0JFQVJFUl9UT0tFTl9WMikKKwkJcmVxMiA9IGRhdGE7CisKIAlpZiAoaGFuZ19mb3Jl dmVyKQogCXsKIAkJLyogU3RhcnQgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcuICovCkBAIC0yMjEs NiArMjU4LDQ0IEBAIGhhbmRsZV9hdXRoX2RhdGEoUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNv bm4sIHZvaWQgKmRhdGEpCiAJCX0KIAl9CiAKKwlpZiAoZXhwZWN0ZWRfaXNzdWVyKQorCXsKKwkJ aWYgKCFyZXEyKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXhwZWN0ZWQtaXNzdWVyIGNh bm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlp ZiAoIXJlcTItPmlzc3VlcikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBpc3N1 ZXIgXCIlc1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRfaXNzdWVyKTsKKwkJCXJldHVybiAtMTsK KwkJfQorCisJCWlmIChzdHJjbXAoZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIpICE9IDAp CisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNcIiwgZ290IFwi JXNcIlxuIiwgZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIpOworCQkJcmV0dXJuIC0xOwor CQl9CisJfQorCisJaWYgKGVycm1zZykKKwl7CisJCWlmICh0b2tlbikKKwkJeworCQkJZnByaW50 ZihzdGRlcnIsICItLWVycm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC0tdG9rZW5cbiIpOwor CQkJcmV0dXJuIC0xOworCQl9CisJCWVsc2UgaWYgKCFyZXEyKQorCQl7CisJCQlmcHJpbnRmKHN0 ZGVyciwgIi0tZXJyb3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKKwkJCXJldHVy biAtMTsKKwkJfQorCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHJlcTItPmVycm9yLCBlcnJtc2cp OworCQlyZXR1cm4gLTE7CisJfQorCiAJcmVxLT50b2tlbiA9IHRva2VuOwogCXJldHVybiAxOwog fQpAQCAtMjczLDYgKzM0OCwyMCBAQCBtaXNiZWhhdmVfY2IoUEdjb25uICpjb25uLCBQR29hdXRo QmVhcmVyUmVxdWVzdCAqcmVxLCBwZ3NvY2tldCAqYWx0c29jaykKIAlpZiAoc3RyY21wKG1pc2Jl aGF2ZV9tb2RlLCAiZmFpbC1hc3luYyIpID09IDApCiAJewogCQkvKiBKdXN0IGZhaWwgIm5vcm1h bGx5Ii4gKi8KKwkJaWYgKGVycm1zZykKKwkJeworCQkJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAq cmVxMjsKKworCQkJaWYgKGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9U T0tFTikKKwkJCXsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fubm90IGJlIGNvbWJp bmVkIHdpdGggLXYxXG4iKTsKKwkJCQlleGl0KDEpOworCQkJfQorCisJCQlyZXEyID0gKFBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKikgcmVxOworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocmVxMi0+ ZXJyb3IsIGVycm1zZyk7CisJCX0KKwogCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CiAJ fQogCWVsc2UgaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLXRva2VuIikgPT0gMCkKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5w bCBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbAppbmRl eCBlNmM5MWZjOTExYy4uMGNlZTcyZWY1OGUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMv b2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL29h dXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKQEAgLTc4LDkgKzc4LDkgQEAgc3ViIHRlc3QK IAlteSAkbG9nX3N0YXJ0ID0gLXMgJG5vZGUtPmxvZ2ZpbGU7CiAJbXkgKCRzdGRvdXQsICRzdGRl cnIpID0gcnVuX2NvbW1hbmQoXEBjbWQpOwogCi0JaWYgKGRlZmluZWQoJHBhcmFtc3tleHBlY3Rl ZF9zdGRvdXR9KSkKKwlpZiAoJHBhcmFtc3tleHBlY3Rfc3VjY2Vzc30pCiAJewotCQlsaWtlKCRz dGRvdXQsICRwYXJhbXN7ZXhwZWN0ZWRfc3Rkb3V0fSwgIiR0ZXN0X25hbWU6IHN0ZG91dCBtYXRj aGVzIik7CisJCWxpa2UoJHN0ZG91dCwgcXIvY29ubmVjdGlvbiBzdWNjZWVkZWQvLCAiJHRlc3Rf bmFtZTogc3Rkb3V0IG1hdGNoZXMiKTsKIAl9CiAKIAlpZiAoZGVmaW5lZCgkcGFyYW1ze2V4cGVj dGVkX3N0ZGVycn0pKQpAQCAtMTEwLDExICsxMTAsMjQgQEAgdGVzdCgKIAlmbGFncyA9PiBbCiAJ CSItLXRva2VuIiwgIm15LXRva2VuIiwKIAkJIi0tZXhwZWN0ZWQtdXJpIiwgIiRpc3N1ZXIvLndl bGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24iLAorCQkiLS1leHBlY3RlZC1pc3N1ZXIiLCAi JGlzc3VlciIsCiAJCSItLWV4cGVjdGVkLXNjb3BlIiwgJHNjb3BlLAogCV0sCi0JZXhwZWN0ZWRf c3Rkb3V0ID0+IHFyL2Nvbm5lY3Rpb24gc3VjY2VlZGVkLywKKwlleHBlY3Rfc3VjY2VzcyA9PiAx LAogCWxvZ19saWtlID0+IFtxci9vYXV0aF92YWxpZGF0b3I6IHRva2VuPSJteS10b2tlbiIsIHJv bGU9IiR1c2VyIi9dKTsKIAorIyBNYWtlIHN1cmUgdGhlIHYxIGhvb2sgY29udGludWVzIHRvIHdv cmsuICovCit0ZXN0KAorCSJ2MSBzeW5jaHJvbm91cyBob29rIGNhbiBwcm92aWRlIGEgdG9rZW4i LAorCWZsYWdzID0+IFsKKwkJIi12MSIsCisJCSItLXRva2VuIiA9PiAibXktdG9rZW4tdjEiLAor CQkiLS1leHBlY3RlZC11cmkiID0+ICIkaXNzdWVyLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1 cmF0aW9uIiwKKwkJIi0tZXhwZWN0ZWQtc2NvcGUiID0+ICRzY29wZSwKKwldLAorCWV4cGVjdF9z dWNjZXNzID0+IDEsCisJbG9nX2xpa2UgPT4gW3FyL29hdXRoX3ZhbGlkYXRvcjogdG9rZW49Im15 LXRva2VuLXYxIiwgcm9sZT0iJHVzZXIiL10pOworCiBpZiAoJEVOVnt3aXRoX2xpYmN1cmx9IG5l ICd5ZXMnKQogewogCSMgbGlicHEgc2hvdWxkIGhlbHAgdXNlcnMgb3V0IGlmIG5vIE9BdXRoIHN1 cHBvcnQgaXMgYnVpbHQgaW4uCkBAIC0xMjYsNiArMTM5LDE1IEBAIGlmICgkRU5We3dpdGhfbGli Y3VybH0gbmUgJ3llcycpCiAJKTsKIH0KIAorIyB2MiBzeW5jaHJvbm91cyBmbG93cyBzaG91bGQg YmUgYWJsZSB0byBzZXQgY3VzdG9tIGVycm9yIG1lc3NhZ2VzLgordGVzdCgKKwkiYmFzaWMgc3lu Y2hyb25vdXMgaG9vayBjYW4gc2V0IGVycm9yIG1lc3NhZ2VzIiwKKwlmbGFncyA9PiBbCisJCSIt LWVycm9yIiA9PiAiYSBjdXN0b20gZXJyb3IgbWVzc2FnZSIsCisJXSwKKwlleHBlY3RlZF9zdGRl cnIgPT4KKwkgIHFyL3VzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZDogYSBjdXN0b20gZXJy b3IgbWVzc2FnZS8pOworCiAjIGNvbm5lY3RfdGltZW91dCBzaG91bGQgd29yayBpZiB0aGUgZmxv dyBkb2Vzbid0IHJlc3BvbmQuCiAkY29tbW9uX2Nvbm5zdHIgPSAiJGNvbW1vbl9jb25uc3RyIGNv bm5lY3RfdGltZW91dD0xIjsKIHRlc3QoCkBAIC0xNjUsNCArMTg3LDE0IEBAIGZvcmVhY2ggbXkg JGMgKEBjYXNlcykKIAkJZXhwZWN0ZWRfc3RkZXJyID0+ICRjLT57J2V4cGVjdGVkX2Vycm9yJ30p OwogfQogCisjIHYyIGFzeW5jIGZsb3dzIHNob3VsZCBiZSBhYmxlIHRvIHNldCBlcnJvciBtZXNz YWdlcywgdG9vLgordGVzdCgKKwkiYXN5bmNocm9ub3VzIGhvb2sgY2FuIHNldCBlcnJvciBtZXNz YWdlcyIsCisJZmxhZ3MgPT4gWworCQkiLS1taXNiZWhhdmUiID0+ICJmYWlsLWFzeW5jIiwKKwkJ Ii0tZXJyb3IiID0+ICJhc3luYyBlcnJvciBtZXNzYWdlIiwKKwldLAorCWV4cGVjdGVkX3N0ZGVy ciA9PgorCSAgcXIvdXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkOiBhc3luYyBlcnJvciBt ZXNzYWdlLyk7CisKIGRvbmVfdGVzdGluZygpOwotLSAKMi4zNC4xCgo= --000000000000341f9f06458b36fb Content-Type: application/octet-stream; name="0005-libpq-oauth-Use-the-PGoauthBearerRequestV2-API.patch" Content-Disposition: attachment; filename="0005-libpq-oauth-Use-the-PGoauthBearerRequestV2-API.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miz1s8uf4 RnJvbSBjMDEyYmM3MTVlMTM5MGZlY2RjOTU4Yzk4NDE1MWQwNmNkYWQ5MDQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAyMyBPY3QgMjAyNSAxMjoyNDoyMCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggNS83XSBsaWJwcS1vYXV0aDogVXNlIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVzdFYy IEFQSQoKU3dpdGNoIHRoZSBwcml2YXRlIGxpYnBxLW9hdXRoIEFCSSB0byB0aGUgcHVibGljIFBH b2F1dGhCZWFyZXJSZXF1ZXN0VjIKQVBJLiBBIGh1Z2UgYW1vdW50IG9mIGdsdWUgY29kZSBjYW4g YmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIHRoaXMsIGFuZCBzZXZlcmFsCmNvZGUgcGF0aHMgY2FuIGJl IGRlZHVwbGljYXRlZC4gQWRkaXRpb25hbGx5LCB0aGUgc2hhcmVkIGxpYnJhcnkgbm8KbG9uZ2Vy IG5lZWRzIHRvIGNoYW5nZSBpdHMgbmFtZSBmb3IgZXZlcnkgbWFqb3IgcmVsZWFzZTsgaXQncyBu b3cganVzdAoibGlicHEtb2F1dGguc28iLgoKVE9ETzogVGhpcyBBUEkgbWlnaHQgbmVlZCBhIHB1 YmxpYyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpbiBhZGRpdGlvbgogICAgICB0byB0aGUgcHJp dmF0ZSBOTFMgaW5pdGlhbGl6YXRpb24uIFNob3VsZCB3ZSBleHBvc2UgdGhlIGxvY2sgdG8KICAg ICAgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsPwotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRo L1JFQURNRSAgICAgICAgfCAgNTkgKystLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhw b3J0cy50eHQgICB8ICAgMyArLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVp bGQgICB8ICAgNCArLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgICB8 ICAgOSArLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oICB8ICAgNiAr LQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaCB8ICA0MiArLS0KIHNy Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaCAgICAgfCAgIDcgKy0KIHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyAgfCAzNDcgKysrKysrKysrKysrKy0tLS0t LS0tLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMgfCAgNjAgKy0t LQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jICAgICB8IDE5OCArKysrKyst LS0tLS0tCiAxMCBmaWxlcyBjaGFuZ2VkLCAzMjkgaW5zZXJ0aW9ucygrKSwgNDA2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL1JFQURNRSBiL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL1JFQURNRQppbmRleCA1NTM5NjJkNjQ0ZS4uMjc2ZTY3 NzM1ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL1JFQURNRQorKysg Yi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9SRUFETUUKQEAgLTEwLDQ4ICsxMCwzNSBAQCBy ZXN1bHRzIGluIGEgZmFpbGVkIGNvbm5lY3Rpb24uCiAKID0gTG9hZC1UaW1lIEFCSSA9CiAKLVRo aXMgbW9kdWxlIEFCSSBpcyBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIHNvIGl0 J3Mgc3ViamVjdCB0byBjaGFuZ2UKLWFjcm9zcyBtYWpvciByZWxlYXNlczsgdGhlIG5hbWUgb2Yg dGhlIG1vZHVsZSAobGlicHEtb2F1dGgtTUFKT1IpIHJlZmxlY3RzIHRoaXMuCi1UaGUgbW9kdWxl IGV4cG9ydHMgdGhlIGZvbGxvd2luZyBzeW1ib2xzOgorQXMgb2YgdjE5LCB0aGlzIG1vZHVsZSBB QkkgaXMgcHVibGljIGFuZCBjYW5ub3QgY2hhbmdlIGluY29tcGF0aWJseSB3aXRob3V0IGFsc28K K2NoYW5naW5nIHRoZSBlbnRyeSBwb2ludHMuIEJvdGggbGlicHEgYW5kIGxpYnBxLW9hdXRoIG11 c3QgZ3JhY2VmdWxseSBoYW5kbGUKK3NpdHVhdGlvbnMgd2hlcmUgdGhlIG90aGVyIGxpYnJhcnkg aXMgb2YgYSBkaWZmZXJlbnQgcmVsZWFzZSB2ZXJzaW9uLCBwYXN0IG9yCitmdXR1cmUsIHNpbmNl IHVwZ3JhZGVzIHRvIHRoZSBsaWJyYXJpZXMgbWF5IGhhcHBlbiBpbiBlaXRoZXIgb3JkZXIuCiAK LS0gUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4g KmNvbm4pOwotLSB2b2lkIHBnX2ZlX2NsZWFudXBfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pOwor KERvbid0IGFzc3VtZSB0aGF0IHBhY2thZ2UgdmVyc2lvbiBkZXBlbmRlbmNpZXMgZnJvbSBsaWJw cS1vYXV0aCB0byBsaWJwcSB3aWxsCitzaW1wbGlmeSB0aGUgc2l0dWF0aW9uISBTaW5jZSBsaWJw cSBkZWxheS1sb2FkcyBsaWJwcS1vYXV0aCwgd2Ugc3RpbGwgaGF2ZSB0bworaGFuZGxlIGNhc2Vz IHdoZXJlIGEgbG9uZy1ydW5uaW5nIGNsaWVudCBhcHBsaWNhdGlvbiBoYXMgYSBsaWJwcSB0aGF0 J3Mgb2xkZXIKK3RoYW4gYSBuZXdseSB1cGdyYWRlZCBwbHVnaW4uKQogCi1wZ19mZV9ydW5fb2F1 dGhfZmxvdyBhbmQgcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93IGFyZSBpbXBsZW1lbnRhdGlvbnMg b2YKLWNvbm4tPmFzeW5jX2F1dGggYW5kIGNvbm4tPmNsZWFudXBfYXN5bmNfYXV0aCwgcmVzcGVj dGl2ZWx5LgorVGhlIG1vZHVsZSBleHBvcnRzIHRoZSBmb2xsb3dpbmcgc3ltYm9sOgogCi1BdCB0 aGUgbW9tZW50LCBwZ19mZV9ydW5fb2F1dGhfZmxvdygpIHJlbGllcyBvbiBsaWJwcSdzIHBnX2df dGhyZWFkbG9jayBhbmQKLWxpYnBxX2dldHRleHQoKSwgd2hpY2ggbXVzdCBiZSBpbmplY3RlZCBi eSBsaWJwcSB1c2luZyB0aGlzIGluaXRpYWxpemF0aW9uCi1mdW5jdGlvbiBiZWZvcmUgdGhlIGZs b3cgaXMgcnVuOgorLSBpbnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLCBQR29h dXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKKworVGhlIG1vZHVsZSB0aGVuIGJlaGF2ZXMg YXMgaWYgaXQgaGFkIHJlY2VpdmVkIGEgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIK K3JlcXVlc3QgdmlhIHRoZSBQUWF1dGhEYXRhSG9vayBBUEksIGFuZCBpdCBlaXRoZXIgZmlsbHMg aW4gYW4gZXhpc3RpbmcgdG9rZW4gb3IKK3BvcHVsYXRlcyB0aGUgbmVjZXNzYXJ5IGNhbGxiYWNr cyBmb3IgYSB0b2tlbiB0byBiZSBvYnRhaW5lZCBhc3luY2hyb25vdXNseS4KKyhTZWUgdGhlIGRv Y3VtZW50YXRpb24gZm9yIFBHb2F1dGhCZWFyZXJSZXF1ZXN0LikgVGhlIGZ1bmN0aW9uIHJldHVy bnMgemVybyBvbgorc3VjY2VzcyBhbmQgbm9uemVybyBvbiBmYWlsdXJlLgorCitBZGRpdGlvbmFs bHksIGxpYnBxLW9hdXRoIHJlbGllcyBvbiBsaWJwcSdzIHBnX2dfdGhyZWFkbG9jayBhbmQgbGli cHFfZ2V0dGV4dCgpLAord2hpY2ggbXVzdCBiZSBpbmplY3RlZCBieSBsaWJwcSB1c2luZyB0aGlz IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGJlZm9yZSB0aGUKK2Zsb3cgaXMgcnVuOgogCiAtIHZv aWQgbGlicHFfb2F1dGhfaW5pdChwZ3RocmVhZGxvY2tfdCB0aHJlYWRsb2NrLAotCQkJCQkJbGli cHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCwKLQkJCQkJCWNvbm5fZXJyb3JNZXNzYWdlX2Z1 bmMgZXJybXNnX2ltcGwsCi0JCQkJCQljb25uX29hdXRoX2NsaWVudF9pZF9mdW5jIGNsaWVudGlk X2ltcGwsCi0JCQkJCQljb25uX29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBjbGllbnRzZWNyZXRf aW1wbCwKLQkJCQkJCWNvbm5fb2F1dGhfZGlzY292ZXJ5X3VyaV9mdW5jIGRpc2NvdmVyeXVyaV9p bXBsLAotCQkJCQkJY29ubl9vYXV0aF9pc3N1ZXJfaWRfZnVuYyBpc3N1ZXJpZF9pbXBsLAotCQkJ CQkJY29ubl9vYXV0aF9zY29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQljb25uX3Nhc2xfc3Rh dGVfZnVuYyBzYXNsc3RhdGVfaW1wbCwKLQkJCQkJCXNldF9jb25uX2FsdHNvY2tfZnVuYyBzZXRh bHRzb2NrX2ltcGwsCi0JCQkJCQlzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5jIHNldHRva2VuX2lt cGwpOwotCi1JdCBhbHNvIHJlbGllcyBvbiBhY2Nlc3MgdG8gc2V2ZXJhbCBtZW1iZXJzIG9mIHRo ZSBQR2Nvbm4gc3RydWN0LiBOb3Qgb25seSBjYW4KLXRoZXNlIGNoYW5nZSBwb3NpdGlvbnMgYWNy b3NzIG1pbm9yIHZlcnNpb25zLCBidXQgdGhlIG9mZnNldHMgYXJlbid0IG5lY2Vzc2FyaWx5Ci1z dGFibGUgd2l0aGluIGEgc2luZ2xlIG1pbm9yIHJlbGVhc2UgKGNvbm4tPmVycm9yTWVzc2FnZSwg Zm9yIGluc3RhbmNlLCBjYW4KLWNoYW5nZSBvZmZzZXRzIGRlcGVuZGluZyBvbiBjb25maWd1cmUt dGltZSBvcHRpb25zKS4gVGhlcmVmb3JlIHRoZSBuZWNlc3NhcnkKLWFjY2Vzc29ycyAobmFtZWQg Y29ubl8qKSBhbmQgbXV0YXRvcnMgKHNldF9jb25uXyopIGFyZSBpbmplY3RlZCBoZXJlLiBXaXRo IHRoaXMKLWFwcHJvYWNoLCB3ZSBjYW4gc2FmZWx5IHNlYXJjaCB0aGUgc3RhbmRhcmQgZGxvcGVu KCkgcGF0aHMgKGUuZy4gUlBBVEgsCi1MRF9MSUJSQVJZX1BBVEgsIHRoZSBTTyBjYWNoZSkgZm9y IGFuIGltcGxlbWVudGF0aW9uIG1vZHVsZSB0byB1c2UsIGV2ZW4gaWYgdGhhdAotbW9kdWxlIHdh c24ndCBjb21waWxlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGxpYnBxIC0tIHdoaWNoIGJlY29tZXMg ZXNwZWNpYWxseQotaW1wb3J0YW50IGR1cmluZyAibGl2ZSB1cGdyYWRlIiBzaXR1YXRpb25zIHdo ZXJlIGEgcnVubmluZyBsaWJwcSBhcHBsaWNhdGlvbiBoYXMKLXRoZSBsaWJwcS1vYXV0aCBtb2R1 bGUgdXBkYXRlZCBvdXQgZnJvbSB1bmRlciBpdCBiZWZvcmUgaXQncyBmaXJzdCBsb2FkZWQgZnJv bQotZGlzay4KKwkJCQkJCWxpYnBxX2dldHRleHRfZnVuYyBnZXR0ZXh0X2ltcGwpOwogCiA9IFN0 YXRpYyBCdWlsZCA9CiAKIFRoZSBzdGF0aWMgbGlicmFyeSBsaWJwcS5hIGRvZXMgbm90IHBlcmZv cm0gYW55IGR5bmFtaWMgbG9hZGluZy4gSWYgdGhlIGJ1aWx0aW4KLWZsb3cgaXMgZW5hYmxlZCwg dGhlIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvIGxpbmsgYWdhaW5zdCBsaWJwcS1vYXV0aC5h Ci1kaXJlY3RseSB0byBwcm92aWRlIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gKGxpYnBxLmEgYW5k IGxpYnBxLW9hdXRoLmEgbXVzdCBiZQotcGFydCBvZiB0aGUgc2FtZSBidWlsZC4gVW5saWtlIHRo ZSBkeW5hbWljIG1vZHVsZSwgdGhlcmUgYXJlIG5vIHRyYW5zbGF0aW9uCi1zaGltcyBwcm92aWRl ZC4pCitmbG93IGlzIGVuYWJsZWQsIHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byBsaW5r IGFnYWluc3QgbGlicHEtb2F1dGguYSB0bworcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbCwg b3IgZWxzZSBpbXBsZW1lbnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoKSBpdHNlbGYuCmRpZmYgLS1n aXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9leHBvcnRzLnR4dCBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CmluZGV4IDY4OTFhODNkYmY5Li43YmMxMmI4NjBk NyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQKKysr IGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQKQEAgLTEsNCArMSwzIEBA CiAjIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CiBsaWJwcV9vYXV0aF9p bml0ICAgICAgICAgIDEKLXBnX2ZlX3J1bl9vYXV0aF9mbG93ICAgICAgMgotcGdfZmVfY2xlYW51 cF9vYXV0aF9mbG93ICAzCitwZ19zdGFydF9vYXV0aGJlYXJlciAgICAgIDIKZGlmZiAtLWdpdCBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIGIvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvbWVzb24uYnVpbGQKaW5kZXggODgxZTNmMjRmMTAuLjExMTk5MTAwYjI4IDEw MDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZAorKysgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZApAQCAtMzUsOSArMzUsNyBAQCBs aWJwcV9vYXV0aF9zdCA9IHN0YXRpY19saWJyYXJ5KCdsaWJwcS1vYXV0aCcsCiAKICMgVGhpcyBp cyBhbiBpbnRlcm5hbCBtb2R1bGU7IHdlIGRvbid0IHdhbnQgYW4gU09OQU1FIGFuZCB0aGVyZWZv cmUgZG8gbm90IHNldAogIyBTT19NQUpPUl9WRVJTSU9OLgotbGlicHFfb2F1dGhfbmFtZSA9ICds aWJwcS1vYXV0aC1AMEAnLmZvcm1hdChwZ192ZXJzaW9uX21ham9yKQotCi1saWJwcV9vYXV0aF9z byA9IHNoYXJlZF9tb2R1bGUobGlicHFfb2F1dGhfbmFtZSwKK2xpYnBxX29hdXRoX3NvID0gc2hh cmVkX21vZHVsZSgnbGlicHEtb2F1dGgnLAogICBsaWJwcV9vYXV0aF9zb3VyY2VzICsgbGlicHFf b2F1dGhfc29fc291cmNlcywKICAgaW5jbHVkZV9kaXJlY3RvcmllczogW2xpYnBxX29hdXRoX2lu YywgcG9zdGdyZXNfaW5jXSwKICAgY19hcmdzOiBsaWJwcV9vYXV0aF9zb19jX2FyZ3MsCmRpZmYg LS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCmluZGV4IDUxMTQ1ZjA4NWE4Li4wZmViYjM5M2ZlYiAx MDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKQEAgLTE2LDEzICsxNiwxMCBAQCBpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBQR0ZJTEVERVNDID0gImxp YnBxLW9hdXRoIC0gZGV2aWNlIGF1dGhvcml6YXRpb24gT0F1dGggc3VwcG9ydCIKIAogIyBUaGlz IGlzIGFuIGludGVybmFsIG1vZHVsZTsgd2UgZG9uJ3Qgd2FudCBhbiBTT05BTUUgYW5kIHRoZXJl Zm9yZSBkbyBub3Qgc2V0Ci0jIFNPX01BSk9SX1ZFUlNJT04uCi1OQU1FID0gcHEtb2F1dGgtJChN QUpPUlZFUlNJT04pCi0KLSMgRm9yY2UgdGhlIG5hbWUgImxpYnBxLW9hdXRoIiBmb3IgYm90aCB0 aGUgc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzLiBUaGUKLSMgc3RhdGljbGliIGRvZXNuJ3Qg bmVlZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIGl0cyBuYW1lLgorIyBTT19NQUpPUl9WRVJTSU9O LiBUaGlzIHJlcXVpcmVzIGFuIGV4cGxpY2l0IG92ZXJyaWRlIGZvciB0aGUgc2hhcmVkIGxpYnJh cnkKKyMgbmFtZS4KK05BTUUgPSBwcS1vYXV0aAogb3ZlcnJpZGUgc2hsaWIgOj0gbGliJChOQU1F KSQoRExTVUZGSVgpCi1vdmVycmlkZSBzdGxpYiA6PSBsaWJwcS1vYXV0aC5hCiAKIG92ZXJyaWRl IENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpL3NyYy9wb3J0 ICQoQ1BQRkxBR1MpICQoTElCQ1VSTF9DUFBGTEFHUykKIG92ZXJyaWRlIENGTEFHUyArPSAkKFBU SFJFQURfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1 dGgtY3VybC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCmluZGV4 IDI0OGQwNDI0YWQwLi40NzcwNDY4OTU4NiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvb2F1dGgtY3VybC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29h dXRoLWN1cmwuaApAQCAtMTcsOCArMTcsOCBAQAogCiAjaW5jbHVkZSAibGlicHEtZmUuaCIKIAot LyogRXhwb3J0ZWQgYXN5bmMtYXV0aCBjYWxsYmFja3MuICovCi1leHRlcm4gUEdETExFWFBPUlQg UG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNv bm4pOwotZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBH Y29ubiAqY29ubik7CisvKiBFeHBvcnRlZCBmbG93IGNhbGxiYWNrLiAqLworZXh0ZXJuIFBHRExM RVhQT1JUIGludCBwZ19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJ CVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpOwogCiAjZW5kaWYJCQkJCQkJLyogT0FV VEhfQ1VSTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0 aC11dGlscy5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaAppbmRl eCBmNGZmZWZlZjIwOC4uMzQzYWE5NWNhY2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL29hdXRoLXV0aWxzLmgKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv b2F1dGgtdXRpbHMuaApAQCAtMTUsNTMgKzE1LDE0IEBACiAjaWZuZGVmIE9BVVRIX1VUSUxTX0gK ICNkZWZpbmUgT0FVVEhfVVRJTFNfSAogCi0jaW5jbHVkZSAiZmUtYXV0aC1vYXV0aC5oIgogI2lu Y2x1ZGUgImxpYnBxLWZlLmgiCiAjaW5jbHVkZSAicHFleHBidWZmZXIuaCIKIAotLyoKLSAqIEEg YmFuayBvZiBjYWxsYmFja3MgdG8gc2FmZWx5IGFjY2VzcyBtZW1iZXJzIG9mIFBHY29ubiwgd2hp Y2ggYXJlIGFsbCBwYXNzZWQKLSAqIHRvIGxpYnBxX29hdXRoX2luaXQoKSBieSBsaWJwcS4KLSAq Ci0gKiBLZWVwIHRoZXNlIGFsaWduZWQgd2l0aCB0aGUgZGVmaW5pdGlvbnMgaW4gZmUtYXV0aC1v YXV0aC5jIGFzIHdlbGwgYXMgdGhlCi0gKiBzdGF0aWMgZGVjbGFyYXRpb25zIGluIG9hdXRoLWN1 cmwuYy4KLSAqLwotI2RlZmluZSBERUNMQVJFX0dFVFRFUihUWVBFLCBNRU1CRVIpIFwKLQl0eXBl ZGVmIFRZUEUgKCpjb25uXyAjIyBNRU1CRVIgIyMgX2Z1bmMpIChQR2Nvbm4gKmNvbm4pOyBcCi0J ZXh0ZXJuIGNvbm5fICMjIE1FTUJFUiAjIyBfZnVuYyBjb25uXyAjIyBNRU1CRVI7Ci0KLSNkZWZp bmUgREVDTEFSRV9TRVRURVIoVFlQRSwgTUVNQkVSKSBcCi0JdHlwZWRlZiB2b2lkICgqc2V0X2Nv bm5fICMjIE1FTUJFUiAjIyBfZnVuYykgKFBHY29ubiAqY29ubiwgVFlQRSB2YWwpOyBcCi0JZXh0 ZXJuIHNldF9jb25uXyAjIyBNRU1CRVIgIyMgX2Z1bmMgc2V0X2Nvbm5fICMjIE1FTUJFUjsKLQot REVDTEFSRV9HRVRURVIoUFFFeHBCdWZmZXIsIGVycm9yTWVzc2FnZSk7Ci1ERUNMQVJFX0dFVFRF UihjaGFyICosIG9hdXRoX2NsaWVudF9pZCk7Ci1ERUNMQVJFX0dFVFRFUihjaGFyICosIG9hdXRo X2NsaWVudF9zZWNyZXQpOwotREVDTEFSRV9HRVRURVIoY2hhciAqLCBvYXV0aF9kaXNjb3Zlcnlf dXJpKTsKLURFQ0xBUkVfR0VUVEVSKGNoYXIgKiwgb2F1dGhfaXNzdWVyX2lkKTsKLURFQ0xBUkVf R0VUVEVSKGNoYXIgKiwgb2F1dGhfc2NvcGUpOwotREVDTEFSRV9HRVRURVIoZmVfb2F1dGhfc3Rh dGUgKiwgc2FzbF9zdGF0ZSk7Ci0KLURFQ0xBUkVfU0VUVEVSKHBnc29ja2V0LCBhbHRzb2NrKTsK LURFQ0xBUkVfU0VUVEVSKGNoYXIgKiwgb2F1dGhfdG9rZW4pOwotCi0jdW5kZWYgREVDTEFSRV9H RVRURVIKLSN1bmRlZiBERUNMQVJFX1NFVFRFUgotCiB0eXBlZGVmIGNoYXIgKigqbGlicHFfZ2V0 dGV4dF9mdW5jKSAoY29uc3QgY2hhciAqbXNnaWQpOwogCiAvKiBJbml0aWFsaXplcyBsaWJwcS1v YXV0aC4gKi8KIGV4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGxpYnBxX29hdXRoX2luaXQocGd0aHJl YWRsb2NrX3QgdGhyZWFkbG9jaywKLQkJCQkJCQkJCQkgbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRl eHRfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9lcnJvck1lc3NhZ2VfZnVuYyBlcnJtc2dfaW1wbCwK LQkJCQkJCQkJCQkgY29ubl9vYXV0aF9jbGllbnRfaWRfZnVuYyBjbGllbnRpZF9pbXBsLAotCQkJ CQkJCQkJCSBjb25uX29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBjbGllbnRzZWNyZXRfaW1wbCwK LQkJCQkJCQkJCQkgY29ubl9vYXV0aF9kaXNjb3ZlcnlfdXJpX2Z1bmMgZGlzY292ZXJ5dXJpX2lt cGwsCi0JCQkJCQkJCQkJIGNvbm5fb2F1dGhfaXNzdWVyX2lkX2Z1bmMgaXNzdWVyaWRfaW1wbCwK LQkJCQkJCQkJCQkgY29ubl9vYXV0aF9zY29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQkJCQkJ IGNvbm5fc2FzbF9zdGF0ZV9mdW5jIHNhc2xzdGF0ZV9pbXBsLAotCQkJCQkJCQkJCSBzZXRfY29u bl9hbHRzb2NrX2Z1bmMgc2V0YWx0c29ja19pbXBsLAotCQkJCQkJCQkJCSBzZXRfY29ubl9vYXV0 aF90b2tlbl9mdW5jIHNldHRva2VuX2ltcGwpOworCQkJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0X2Z1 bmMgZ2V0dGV4dF9pbXBsKTsKIAogLyoKICAqIER1cGxpY2F0ZWQgQVBJcywgY29waWVkIGZyb20g bGlicHEgKHByaW1hcmlseSBsaWJwcS1pbnQuaCwgd2hpY2ggd2UgY2Fubm90CkBAIC03NSw3ICsz Niw2IEBAIHR5cGVkZWYgZW51bQogCVBHX0JPT0xfTk8JCQkJCS8qIE5vIChmYWxzZSkgKi8KIH0g UEdUZXJuYXJ5Qm9vbDsKIAotZXh0ZXJuIHZvaWQgbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDIsIDMp OwogZXh0ZXJuIGJvb2wgb2F1dGhfdW5zYWZlX2RlYnVnZ2luZ19lbmFibGVkKHZvaWQpOwogZXh0 ZXJuIGludAlwcV9ibG9ja19zaWdwaXBlKHNpZ3NldF90ICpvc2lnc2V0LCBib29sICpzaWdwaXBl X3BlbmRpbmcpOwogZXh0ZXJuIHZvaWQgcHFfcmVzZXRfc2lncGlwZShzaWdzZXRfdCAqb3NpZ3Nl dCwgYm9vbCBzaWdwaXBlX3BlbmRpbmcsIGJvb2wgZ290X2VwaXBlKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGgtb2F1dGguaAppbmRleCAwZDU5ZTkxNjA1Yi4uYjlhZWQ4NzllNjQgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaAorKysgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmgKQEAgLTI3LDExICsyNyw2IEBAIGVudW0gZmVfb2F1 dGhfc3RlcAogCUZFX09BVVRIX1NFUlZFUl9FUlJPUiwKIH07CiAKLS8qCi0gKiBUaGlzIHN0cnVj dCBpcyBleHBvcnRlZCB0byB0aGUgbGlicHEtb2F1dGggbW9kdWxlLiBJZiBjaGFuZ2VzIGFyZSBu ZWVkZWQKLSAqIGR1cmluZyBiYWNrcG9ydHMgdG8gc3RhYmxlIGJyYW5jaGVzLCBwbGVhc2Uga2Vl cCBBQkkgY29tcGF0aWJpbGl0eSAobm8KLSAqIGNoYW5nZXMgdG8gZXhpc3RpbmcgbWVtYmVycywg YWRkIG5ldyBtZW1iZXJzIGF0IHRoZSBlbmQsIGV0Yy4pLgotICovCiB0eXBlZGVmIHN0cnVjdAog ewogCWVudW0gZmVfb2F1dGhfc3RlcCBzdGVwOwpAQCAtMzksMTIgKzM0LDEyIEBAIHR5cGVkZWYg c3RydWN0CiAJUEdjb25uCSAgICpjb25uOwogCXZvaWQJICAgKmFzeW5jX2N0eDsKIAorCWJvb2wJ CWJ1aWx0aW47CiAJdm9pZAkgICAqYnVpbHRpbl9mbG93OwogfSBmZV9vYXV0aF9zdGF0ZTsKIAog ZXh0ZXJuIHZvaWQgcHFDbGVhck9BdXRoVG9rZW4oUEdjb25uICpjb25uKTsKIGV4dGVybiBib29s IG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCh2b2lkKTsKLWV4dGVybiBib29sIHVzZV9i dWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpOwogCiAvKiBN ZWNoYW5pc21zIGluIGZlLWF1dGgtb2F1dGguYyAqLwogZXh0ZXJuIGNvbnN0IHBnX2ZlX3Nhc2xf bWVjaCBwZ19vYXV0aF9tZWNoOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1 dGgvb2F1dGgtY3VybC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5j CmluZGV4IGJkMGE2NTZhMTY2Li44MTJkZjE0N2QyMCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFj ZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL29hdXRoLWN1cmwuYwpAQCAtMjksNyArMjksNiBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJj b21tb24vanNvbmFwaS5oIgotI2luY2x1ZGUgImZlLWF1dGgtb2F1dGguaCIKICNpbmNsdWRlICJt Yi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm9hdXRoLWN1cmwuaCIKIApAQCAtNDQsMjMgKzQzLDEw IEBACiAKICNlbHNlCQkJCQkJCS8qICFVU0VfRFlOQU1JQ19PQVVUSCAqLwogCi0vKgotICogU3Rh dGljIGJ1aWxkcyBtYXkgcmVseSBvbiBQR2Nvbm4gb2Zmc2V0cyBkaXJlY3RseS4gS2VlcCB0aGVz ZSBhbGlnbmVkIHdpdGgKLSAqIHRoZSBiYW5rIG9mIGNhbGxiYWNrcyBpbiBvYXV0aC11dGlscy5o LgotICovCisvKiBTdGF0aWMgYnVpbGRzIG1heSBtYWtlIHVzZSBvZiBsaWJwcSBpbnRlcm5hbHMg ZGlyZWN0bHkuICovCisjaW5jbHVkZSAiZmUtYXV0aC1vYXV0aC5oIgogI2luY2x1ZGUgImxpYnBx LWludC5oIgogCi0jZGVmaW5lIGNvbm5fZXJyb3JNZXNzYWdlKENPTk4pICgmQ09OTi0+ZXJyb3JN ZXNzYWdlKQotI2RlZmluZSBjb25uX29hdXRoX2NsaWVudF9pZChDT05OKSAoQ09OTi0+b2F1dGhf Y2xpZW50X2lkKQotI2RlZmluZSBjb25uX29hdXRoX2NsaWVudF9zZWNyZXQoQ09OTikgKENPTk4t Pm9hdXRoX2NsaWVudF9zZWNyZXQpCi0jZGVmaW5lIGNvbm5fb2F1dGhfZGlzY292ZXJ5X3VyaShD T05OKSAoQ09OTi0+b2F1dGhfZGlzY292ZXJ5X3VyaSkKLSNkZWZpbmUgY29ubl9vYXV0aF9pc3N1 ZXJfaWQoQ09OTikgKENPTk4tPm9hdXRoX2lzc3Vlcl9pZCkKLSNkZWZpbmUgY29ubl9vYXV0aF9z Y29wZShDT05OKSAoQ09OTi0+b2F1dGhfc2NvcGUpCi0jZGVmaW5lIGNvbm5fc2FzbF9zdGF0ZShD T05OKSAoQ09OTi0+c2FzbF9zdGF0ZSkKLQotI2RlZmluZSBzZXRfY29ubl9hbHRzb2NrKENPTk4s IFZBTCkgZG8geyBDT05OLT5hbHRzb2NrID0gVkFMOyB9IHdoaWxlICgwKQotI2RlZmluZSBzZXRf Y29ubl9vYXV0aF90b2tlbihDT05OLCBWQUwpIGRvIHsgQ09OTi0+b2F1dGhfdG9rZW4gPSBWQUw7 IH0gd2hpbGUgKDApCi0KICNlbmRpZgkJCQkJCQkvKiBVU0VfRFlOQU1JQ19PQVVUSCAqLwogCiAv KiBPbmUgZmluYWwgZ3VhcmRyYWlsIGFnYWluc3QgYWNjaWRlbnRhbCBpbmNsdXNpb24uLi4gKi8K QEAgLTIyNyw2ICsyMTMsMTUgQEAgZW51bSBPQXV0aFN0ZXAKICAqLwogc3RydWN0IGFzeW5jX2N0 eAogeworCS8qIHJlbGV2YW50IGNvbm5lY3Rpb24gb3B0aW9ucyBjYWNoZWQgZnJvbSB0aGUgUEdj b25uICovCisJY2hhcgkgICAqY2xpZW50X2lkOwkJLyogb2F1dGhfY2xpZW50X2lkICovCisJY2hh cgkgICAqY2xpZW50X3NlY3JldDsJLyogb2F1dGhfY2xpZW50X3NlY3JldCAobWF5IGJlIE5VTEwp ICovCisKKwkvKiBvcHRpb25zIGNhY2hlZCBmcm9tIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVzdCAo d2UgZG9uJ3Qgb3duIHRoZXNlKSAqLworCWNvbnN0IGNoYXIgKmRpc2NvdmVyeV91cmk7CisJY29u c3QgY2hhciAqaXNzdWVyX2lkOworCWNvbnN0IGNoYXIgKnNjb3BlOworCiAJZW51bSBPQXV0aFN0 ZXAgc3RlcDsJCS8qIHdoZXJlIGFyZSB3ZSBpbiB0aGUgZmxvdz8gKi8KIAogCWludAkJCXRpbWVy ZmQ7CQkvKiBkZXNjcmlwdG9yIGZvciBzaWduYWxpbmcgYXN5bmMgdGltZW91dHMgKi8KQEAgLTI4 NSw3ICsyODAsNyBAQCBzdHJ1Y3QgYXN5bmNfY3R4CiAgKiBUZWFycyBkb3duIHRoZSBDdXJsIGhh bmRsZXMgYW5kIGZyZWVzIHRoZSBhc3luY19jdHguCiAgKi8KIHN0YXRpYyB2b2lkCi1mcmVlX2Fz eW5jX2N0eChQR2Nvbm4gKmNvbm4sIHN0cnVjdCBhc3luY19jdHggKmFjdHgpCitmcmVlX2FzeW5j X2N0eChQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXEsIHN0cnVjdCBhc3luY19jdHggKmFjdHgp CiB7CiAJLyoKIAkgKiBJbiBnZW5lcmFsLCBub25lIG9mIHRoZSBlcnJvciBjYXNlcyBiZWxvdyBz aG91bGQgZXZlciBoYXBwZW4gaWYgd2UgaGF2ZQpAQCAtMzAzLDkgKzI5OCw5IEBAIGZyZWVfYXN5 bmNfY3R4KFBHY29ubiAqY29ubiwgc3RydWN0IGFzeW5jX2N0eCAqYWN0eCkKIAkJQ1VSTE1jb2Rl CWVyciA9IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShhY3R4LT5jdXJsbSwgYWN0eC0+Y3VybCk7 CiAKIAkJaWYgKGVycikKLQkJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sCi0JCQkJCQkJ CQkibGliY3VybCBlYXN5IGhhbmRsZSByZW1vdmFsIGZhaWxlZDogJXMiLAotCQkJCQkJCQkJY3Vy bF9tdWx0aV9zdHJlcnJvcihlcnIpKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHJlcS0+ZXJyb3Is CisJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJsaWJjdXJsIGVhc3kgaGFuZGxlIHJlbW92YWwgZmFp bGVkOiAlcyIpLAorCQkJCQkJCSAgY3VybF9tdWx0aV9zdHJlcnJvcihlcnIpKTsKIAl9CiAKIAlp ZiAoYWN0eC0+Y3VybCkKQEAgLTMyMyw5ICszMTgsOSBAQCBmcmVlX2FzeW5jX2N0eChQR2Nvbm4g KmNvbm4sIHN0cnVjdCBhc3luY19jdHggKmFjdHgpCiAJCUNVUkxNY29kZQllcnIgPSBjdXJsX211 bHRpX2NsZWFudXAoYWN0eC0+Y3VybG0pOwogCiAJCWlmIChlcnIpCi0JCQlsaWJwcV9hcHBlbmRf Y29ubl9lcnJvcihjb25uLAotCQkJCQkJCQkJImxpYmN1cmwgbXVsdGkgaGFuZGxlIGNsZWFudXAg ZmFpbGVkOiAlcyIsCi0JCQkJCQkJCQljdXJsX211bHRpX3N0cmVycm9yKGVycikpOworCQkJYXBw ZW5kUFFFeHBCdWZmZXIocmVxLT5lcnJvciwKKwkJCQkJCQkgIGxpYnBxX2dldHRleHQoImxpYmN1 cmwgbXVsdGkgaGFuZGxlIGNsZWFudXAgZmFpbGVkOiAlcyIpLAorCQkJCQkJCSAgY3VybF9tdWx0 aV9zdHJlcnJvcihlcnIpKTsKIAl9CiAKIAlmcmVlX3Byb3ZpZGVyKCZhY3R4LT5wcm92aWRlcik7 CkBAIC0zNDAsMjkgKzMzNSw2NyBAQCBmcmVlX2FzeW5jX2N0eChQR2Nvbm4gKmNvbm4sIHN0cnVj dCBhc3luY19jdHggKmFjdHgpCiAJaWYgKGFjdHgtPnRpbWVyZmQgPj0gMCkKIAkJY2xvc2UoYWN0 eC0+dGltZXJmZCk7CiAKKwlmcmVlKGFjdHgtPmNsaWVudF9pZCk7CisJZnJlZShhY3R4LT5jbGll bnRfc2VjcmV0KTsKKwogCWZyZWUoYWN0eCk7CiB9CiAKIC8qCi0gKiBSZWxlYXNlIHJlc291cmNl cyB1c2VkIGZvciB0aGUgYXN5bmNocm9ub3VzIGV4Y2hhbmdlIGFuZCBkaXNjb25uZWN0IHRoZQot ICogYWx0c29jay4KLSAqCi0gKiBUaGlzIGlzIGNhbGxlZCBlaXRoZXIgYXQgdGhlIGVuZCBvZiBh IHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24sIG9yIGR1cmluZwotICogcHFEcm9wQ29ubmVjdGlv bigpLCBzbyB3ZSB3b24ndCBsZWFrIHJlc291cmNlcyBldmVuIGlmIFBRY29ubmVjdFBvbGwoKSBu ZXZlcgotICogY2FsbHMgdXMgYmFjay4KKyAqIFJlbGVhc2UgcmVzb3VyY2VzIHVzZWQgZm9yIHRo ZSBhc3luY2hyb25vdXMgZXhjaGFuZ2UuCiAgKi8KLXZvaWQKLXBnX2ZlX2NsZWFudXBfb2F1dGhf ZmxvdyhQR2Nvbm4gKmNvbm4pCitzdGF0aWMgdm9pZAorcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93 KFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcXVlc3QpCiB7Ci0JZmVfb2F1 dGhfc3RhdGUgKnN0YXRlID0gY29ubl9zYXNsX3N0YXRlKGNvbm4pOworCXN0cnVjdCBhc3luY19j dHggKmFjdHggPSByZXF1ZXN0LT51c2VyOworCisJLyogcmVxdWVzdC0+Y2xlYW51cCBpcyBvbmx5 IHNldCBhZnRlciBhY3R4IGhhcyBiZWVuIGFsbG9jYXRlZC4gKi8KKwlBc3NlcnQoYWN0eCk7CiAK LQlpZiAoc3RhdGUtPmFzeW5jX2N0eCkKKwlmcmVlX2FzeW5jX2N0eCgoUEdvYXV0aEJlYXJlclJl cXVlc3RWMiAqKSByZXF1ZXN0LCBhY3R4KTsKKwlyZXF1ZXN0LT51c2VyID0gTlVMTDsKKworCS8q IGxpYnBxIGhhcyBtYWRlIGl0cyBvd24gY29weSBvZiB0aGUgdG9rZW47IGNsZWFyIG91cnMgbm93 LiAqLworCWlmIChyZXF1ZXN0LT50b2tlbikKIAl7Ci0JCWZyZWVfYXN5bmNfY3R4KGNvbm4sIHN0 YXRlLT5hc3luY19jdHgpOwotCQlzdGF0ZS0+YXN5bmNfY3R4ID0gTlVMTDsKKwkJZXhwbGljaXRf Ynplcm8ocmVxdWVzdC0+dG9rZW4sIHN0cmxlbihyZXF1ZXN0LT50b2tlbikpOworCQlmcmVlKHJl cXVlc3QtPnRva2VuKTsKKwkJcmVxdWVzdC0+dG9rZW4gPSBOVUxMOwogCX0KK30KKworLyoKKyAq IEJ1aWxkcyBhbiBlcnJvciBtZXNzYWdlIGZyb20gYWN0eCBhbmQgYXBwZW5kcyBpdCB0byByZXEt PmVycm9yLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2FjdHhfZXJyb3IoUEdvYXV0aEJlYXJl clJlcXVlc3RWMiAqcmVxLCBzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQoreworCVBRRXhwQnVmZmVy IGVycmJ1ZiA9IHJlcS0+ZXJyb3I7CisKKwkvKgorCSAqIEFzc2VtYmxlIHRoZSB0aHJlZSBwYXJ0 cyBvZiBvdXIgZXJyb3I6IGNvbnRleHQsIGJvZHksIGFuZCBkZXRhaWwuIFNlZQorCSAqIGFsc28g dGhlIGRvY3VtZW50YXRpb24gZm9yIHN0cnVjdCBhc3luY19jdHguCisJICovCisJaWYgKGFjdHgt PmVycmN0eCkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoZXJyYnVmLCAiJXM6ICIsIGxpYnBxX2dldHRl eHQoYWN0eC0+ZXJyY3R4KSk7CisKKwlpZiAoUFFFeHBCdWZmZXJEYXRhQnJva2VuKGFjdHgtPmVy cmJ1ZikpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGVycmJ1ZiwgbGlicHFfZ2V0dGV4dCgib3V0 IG9mIG1lbW9yeSIpKTsKKwllbHNlCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGVycmJ1ZiwgYWN0 eC0+ZXJyYnVmLmRhdGEpOworCisJaWYgKGFjdHgtPmN1cmxfZXJyWzBdKQorCXsKKwkJYXBwZW5k UFFFeHBCdWZmZXIoZXJyYnVmLCAiIChsaWJjdXJsOiAlcykiLCBhY3R4LT5jdXJsX2Vycik7CiAK LQlzZXRfY29ubl9hbHRzb2NrKGNvbm4sIFBHSU5WQUxJRF9TT0NLRVQpOworCQkvKiBTb21ldGlt ZXMgbGliY3VybCBhZGRzIGEgbmV3bGluZSB0byB0aGUgZXJyb3IgYnVmZmVyLiA6KCAqLworCQlp ZiAoZXJyYnVmLT5sZW4gPj0gMiAmJiBlcnJidWYtPmRhdGFbZXJyYnVmLT5sZW4gLSAyXSA9PSAn XG4nKQorCQl7CisJCQllcnJidWYtPmRhdGFbZXJyYnVmLT5sZW4gLSAyXSA9ICcpJzsKKwkJCWVy cmJ1Zi0+ZGF0YVtlcnJidWYtPmxlbiAtIDFdID0gJ1wwJzsKKwkJCWVycmJ1Zi0+bGVuLS07CisJ CX0KKwl9CiB9CiAKIC8qCkBAIC0yMTkzLDcgKzIyMjYsNyBAQCBzdGF0aWMgYm9vbAogY2hlY2tf aXNzdWVyKHN0cnVjdCBhc3luY19jdHggKmFjdHgsIFBHY29ubiAqY29ubikKIHsKIAljb25zdCBz dHJ1Y3QgcHJvdmlkZXIgKnByb3ZpZGVyID0gJmFjdHgtPnByb3ZpZGVyOwotCWNvbnN0IGNoYXIg Km9hdXRoX2lzc3Vlcl9pZCA9IGNvbm5fb2F1dGhfaXNzdWVyX2lkKGNvbm4pOworCWNvbnN0IGNo YXIgKm9hdXRoX2lzc3Vlcl9pZCA9IGFjdHgtPmlzc3Vlcl9pZDsKIAogCUFzc2VydChvYXV0aF9p c3N1ZXJfaWQpOwkvKiBlbnN1cmVkIGJ5IHNldHVwX29hdXRoX3BhcmFtZXRlcnMoKSAqLwogCUFz c2VydChwcm92aWRlci0+aXNzdWVyKTsJLyogZW5zdXJlZCBieSBwYXJzZV9wcm92aWRlcigpICov CkBAIC0yMjk2LDggKzIzMjksOCBAQCBjaGVja19mb3JfZGV2aWNlX2Zsb3coc3RydWN0IGFzeW5j X2N0eCAqYWN0eCkKIHN0YXRpYyBib29sCiBhZGRfY2xpZW50X2lkZW50aWZpY2F0aW9uKHN0cnVj dCBhc3luY19jdHggKmFjdHgsIFBRRXhwQnVmZmVyIHJlcWJvZHksIFBHY29ubiAqY29ubikKIHsK LQljb25zdCBjaGFyICpvYXV0aF9jbGllbnRfaWQgPSBjb25uX29hdXRoX2NsaWVudF9pZChjb25u KTsKLQljb25zdCBjaGFyICpvYXV0aF9jbGllbnRfc2VjcmV0ID0gY29ubl9vYXV0aF9jbGllbnRf c2VjcmV0KGNvbm4pOworCWNvbnN0IGNoYXIgKm9hdXRoX2NsaWVudF9pZCA9IGFjdHgtPmNsaWVu dF9pZDsKKwljb25zdCBjaGFyICpvYXV0aF9jbGllbnRfc2VjcmV0ID0gYWN0eC0+Y2xpZW50X3Nl Y3JldDsKIAogCWJvb2wJCXN1Y2Nlc3MgPSBmYWxzZTsKIAljaGFyCSAgICp1c2VybmFtZSA9IE5V TEw7CkBAIC0yMzgwLDExICsyNDEzLDEwIEBAIGNsZWFudXA6CiBzdGF0aWMgYm9vbAogc3RhcnRf ZGV2aWNlX2F1dGh6KHN0cnVjdCBhc3luY19jdHggKmFjdHgsIFBHY29ubiAqY29ubikKIHsKLQlj b25zdCBjaGFyICpvYXV0aF9zY29wZSA9IGNvbm5fb2F1dGhfc2NvcGUoY29ubik7CisJY29uc3Qg Y2hhciAqb2F1dGhfc2NvcGUgPSBhY3R4LT5zY29wZTsKIAljb25zdCBjaGFyICpkZXZpY2VfYXV0 aHpfdXJpID0gYWN0eC0+cHJvdmlkZXIuZGV2aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQ7CiAJ UFFFeHBCdWZmZXIgd29ya19idWZmZXIgPSAmYWN0eC0+d29ya19kYXRhOwogCi0JQXNzZXJ0KGNv bm5fb2F1dGhfY2xpZW50X2lkKGNvbm4pKTsgLyogZW5zdXJlZCBieSBzZXR1cF9vYXV0aF9wYXJh bWV0ZXJzKCkgKi8KIAlBc3NlcnQoZGV2aWNlX2F1dGh6X3VyaSk7CS8qIGVuc3VyZWQgYnkgY2hl Y2tfZm9yX2RldmljZV9mbG93KCkgKi8KIAogCS8qIENvbnN0cnVjdCBvdXIgcmVxdWVzdCBib2R5 LiAqLwpAQCAtMjQ3Miw3ICsyNTA0LDYgQEAgc3RhcnRfdG9rZW5fcmVxdWVzdChzdHJ1Y3QgYXN5 bmNfY3R4ICphY3R4LCBQR2Nvbm4gKmNvbm4pCiAJY29uc3QgY2hhciAqZGV2aWNlX2NvZGUgPSBh Y3R4LT5hdXRoei5kZXZpY2VfY29kZTsKIAlQUUV4cEJ1ZmZlciB3b3JrX2J1ZmZlciA9ICZhY3R4 LT53b3JrX2RhdGE7CiAKLQlBc3NlcnQoY29ubl9vYXV0aF9jbGllbnRfaWQoY29ubikpOyAvKiBl bnN1cmVkIGJ5IHNldHVwX29hdXRoX3BhcmFtZXRlcnMoKSAqLwogCUFzc2VydCh0b2tlbl91cmkp OwkJCS8qIGVuc3VyZWQgYnkgcGFyc2VfcHJvdmlkZXIoKSAqLwogCUFzc2VydChkZXZpY2VfY29k ZSk7CQkvKiBlbnN1cmVkIGJ5IHBhcnNlX2RldmljZV9hdXRoeigpICovCiAKQEAgLTI2NTEsNyAr MjY4Miw3IEBAIHByb21wdF91c2VyKHN0cnVjdCBhc3luY19jdHggKmFjdHgsIFBHY29ubiAqY29u bikKICAqIGZ1bmN0aW9uIHdpbGwgbm90IHRyeSB0byByZWluaXRpYWxpemUgQ3VybCBvbiBzdWNj ZXNzaXZlIGNhbGxzLgogICovCiBzdGF0aWMgYm9vbAotaW5pdGlhbGl6ZV9jdXJsKFBHY29ubiAq Y29ubikKK2luaXRpYWxpemVfY3VybChQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXEpCiB7CiAJ LyoKIAkgKiBEb24ndCBsZXQgdGhlIGNvbXBpbGVyIHBsYXkgdHJpY2tzIHdpdGggdGhpcyB2YXJp YWJsZS4gSW4gdGhlCkBAIC0yNjg1LDggKzI3MTYsOCBAQCBpbml0aWFsaXplX2N1cmwoUEdjb25u ICpjb25uKQogCQlnb3RvIGRvbmU7CiAJZWxzZSBpZiAoaW5pdF9zdWNjZXNzZnVsID09IFBHX0JP T0xfTk8pCiAJewotCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAotCQkJCQkJCQkiY3Vy bF9nbG9iYWxfaW5pdCBwcmV2aW91c2x5IGZhaWxlZCBkdXJpbmcgT0F1dGggc2V0dXAiKTsKKwkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocmVxLT5lcnJvciwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgi Y3VybF9nbG9iYWxfaW5pdCBwcmV2aW91c2x5IGZhaWxlZCBkdXJpbmcgT0F1dGggc2V0dXAiKSk7 CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTI3MDQsOCArMjczNSw4IEBAIGluaXRpYWxpemVfY3Vy bChQR2Nvbm4gKmNvbm4pCiAJICovCiAJaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxf QUxMICYgfkNVUkxfR0xPQkFMX1dJTjMyKSAhPSBDVVJMRV9PSykKIAl7Ci0JCWxpYnBxX2FwcGVu ZF9jb25uX2Vycm9yKGNvbm4sCi0JCQkJCQkJCSJjdXJsX2dsb2JhbF9pbml0IGZhaWxlZCBkdXJp bmcgT0F1dGggc2V0dXAiKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocmVxLT5lcnJvciwKKwkJ CQkJCQkgbGlicHFfZ2V0dGV4dCgiY3VybF9nbG9iYWxfaW5pdCBmYWlsZWQgZHVyaW5nIE9BdXRo IHNldHVwIikpOwogCQlpbml0X3N1Y2Nlc3NmdWwgPSBQR19CT09MX05POwogCQlnb3RvIGRvbmU7 CiAJfQpAQCAtMjcyNiwxMSArMjc1NywxMiBAQCBpbml0aWFsaXplX2N1cmwoUEdjb25uICpjb25u KQogCQkgKiBJbiBhIGRvd25ncmFkZSBzaXR1YXRpb24sIHRoZSBkYW1hZ2UgaXMgYWxyZWFkeSBk b25lLiBDdXJsIGdsb2JhbAogCQkgKiBzdGF0ZSBtYXkgYmUgY29ycnVwdGVkLiBCZSBub2lzeS4K IAkJICovCi0JCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJsaWJjdXJsIGlzIG5vIGxv bmdlciB0aHJlYWQtc2FmZVxuIgotCQkJCQkJCQkiXHRDdXJsIGluaXRpYWxpemF0aW9uIHdhcyBy ZXBvcnRlZCB0aHJlYWQtc2FmZSB3aGVuIGxpYnBxXG4iCi0JCQkJCQkJCSJcdHdhcyBjb21waWxl ZCwgYnV0IHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIHZlcnNpb24gb2ZcbiIKLQkJCQkJCQkJIlx0 bGliY3VybCByZXBvcnRzIHRoYXQgaXQgaXMgbm90LiBSZWNvbXBpbGUgbGlicHEgYWdhaW5zdFxu IgotCQkJCQkJCQkiXHR0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgbGliY3VybC4iKTsKKwkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocmVxLT5lcnJvciwKKwkJCQkJCQkgbGlicHFfZ2V0dGV4dCgibGli Y3VybCBpcyBubyBsb25nZXIgdGhyZWFkLXNhZmVcbiIKKwkJCQkJCQkJCQkgICAiXHRDdXJsIGlu aXRpYWxpemF0aW9uIHdhcyByZXBvcnRlZCB0aHJlYWQtc2FmZSB3aGVuIGxpYnBxXG4iCisJCQkJ CQkJCQkJICAgIlx0d2FzIGNvbXBpbGVkLCBidXQgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQgdmVy c2lvbiBvZlxuIgorCQkJCQkJCQkJCSAgICJcdGxpYmN1cmwgcmVwb3J0cyB0aGF0IGl0IGlzIG5v dC4gUmVjb21waWxlIGxpYnBxIGFnYWluc3RcbiIKKwkJCQkJCQkJCQkgICAiXHR0aGUgaW5zdGFs bGVkIHZlcnNpb24gb2YgbGliY3VybC4iKSk7CiAJCWluaXRfc3VjY2Vzc2Z1bCA9IFBHX0JPT0xf Tk87CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0yNzYwLDU0ICsyNzkyLDE2IEBAIGRvbmU6CiAgKiBw cm92aWRlci4KICAqLwogc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKLXBnX2ZlX3J1 bl9vYXV0aF9mbG93X2ltcGwoUEdjb25uICpjb25uKQorcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1w bChQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QsCisJCQkJCQkg IGludCAqYWx0c29jaykKIHsKLQlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBjb25uX3Nhc2xfc3Rh dGUoY29ubik7Ci0Jc3RydWN0IGFzeW5jX2N0eCAqYWN0eDsKKwlzdHJ1Y3QgYXN5bmNfY3R4ICph Y3R4ID0gcmVxdWVzdC0+djEudXNlcjsKIAljaGFyCSAgICpvYXV0aF90b2tlbiA9IE5VTEw7Ci0J UFFFeHBCdWZmZXIgZXJyYnVmOwotCi0JaWYgKCFpbml0aWFsaXplX2N1cmwoY29ubikpCi0JCXJl dHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQotCWlmICghc3RhdGUtPmFzeW5jX2N0eCkKLQl7 Ci0JCS8qCi0JCSAqIENyZWF0ZSBvdXIgYXN5bmNocm9ub3VzIHN0YXRlLCBhbmQgaG9vayBpdCBp bnRvIHRoZSB1cHBlci1sZXZlbAotCQkgKiBPQXV0aCBzdGF0ZSBpbW1lZGlhdGVseSwgc28gYW55 IGZhaWx1cmVzIGJlbG93IHdvbid0IGxlYWsgdGhlCi0JCSAqIGNvbnRleHQgYWxsb2NhdGlvbi4K LQkJICovCi0JCWFjdHggPSBjYWxsb2MoMSwgc2l6ZW9mKCphY3R4KSk7Ci0JCWlmICghYWN0eCkK LQkJewotCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgIm91dCBvZiBtZW1vcnkiKTsK LQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQkJfQotCi0JCWFjdHgtPm11eCA9IFBH SU5WQUxJRF9TT0NLRVQ7Ci0JCWFjdHgtPnRpbWVyZmQgPSAtMTsKLQotCQkvKiBTaG91bGQgd2Ug ZW5hYmxlIHVuc2FmZSBmZWF0dXJlcz8gKi8KLQkJYWN0eC0+ZGVidWdnaW5nID0gb2F1dGhfdW5z YWZlX2RlYnVnZ2luZ19lbmFibGVkKCk7Ci0KLQkJc3RhdGUtPmFzeW5jX2N0eCA9IGFjdHg7Ci0K LQkJaW5pdFBRRXhwQnVmZmVyKCZhY3R4LT53b3JrX2RhdGEpOwotCQlpbml0UFFFeHBCdWZmZXIo JmFjdHgtPmVycmJ1Zik7Ci0KLQkJaWYgKCFzZXR1cF9tdWx0aXBsZXhlcihhY3R4KSkKLQkJCWdv dG8gZXJyb3JfcmV0dXJuOwotCi0JCWlmICghc2V0dXBfY3VybF9oYW5kbGVzKGFjdHgpKQotCQkJ Z290byBlcnJvcl9yZXR1cm47Ci0JfQotCi0JYWN0eCA9IHN0YXRlLT5hc3luY19jdHg7CiAKIAlk bwogCXsKIAkJLyogQnkgZGVmYXVsdCwgdGhlIG11bHRpcGxleGVyIGlzIHRoZSBhbHRzb2NrLiBS ZWFzc2lnbiBhcyBkZXNpcmVkLiAqLwotCQlzZXRfY29ubl9hbHRzb2NrKGNvbm4sIGFjdHgtPm11 eCk7CisJCSphbHRzb2NrID0gYWN0eC0+bXV4OwogCiAJCXN3aXRjaCAoYWN0eC0+c3RlcCkKIAkJ ewpAQCAtMjg3Miw3ICsyODY2LDcgQEAgcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4g KmNvbm4pCiAKIAkJCQkJaWYgKCFleHBpcmVkKQogCQkJCQl7Ci0JCQkJCQlzZXRfY29ubl9hbHRz b2NrKGNvbm4sIGFjdHgtPnRpbWVyZmQpOworCQkJCQkJKmFsdHNvY2sgPSBhY3R4LT50aW1lcmZk OwogCQkJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKIAkJCQkJfQogCkBAIC0yODg5 LDcgKzI4ODMsNyBAQCBwZ19mZV9ydW5fb2F1dGhfZmxvd19pbXBsKFBHY29ubiAqY29ubikKIAkJ ewogCQkJY2FzZSBPQVVUSF9TVEVQX0lOSVQ6CiAJCQkJYWN0eC0+ZXJyY3R4ID0gImZhaWxlZCB0 byBmZXRjaCBPcGVuSUQgZGlzY292ZXJ5IGRvY3VtZW50IjsKLQkJCQlpZiAoIXN0YXJ0X2Rpc2Nv dmVyeShhY3R4LCBjb25uX29hdXRoX2Rpc2NvdmVyeV91cmkoY29ubikpKQorCQkJCWlmICghc3Rh cnRfZGlzY292ZXJ5KGFjdHgsIGFjdHgtPmRpc2NvdmVyeV91cmkpKQogCQkJCQlnb3RvIGVycm9y X3JldHVybjsKIAogCQkJCWFjdHgtPnN0ZXAgPSBPQVVUSF9TVEVQX0RJU0NPVkVSWTsKQEAgLTI5 MjksMTAgKzI5MjMsMTAgQEAgcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNvbm4p CiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCiAJCQkJLyoKLQkJCQkgKiBIb29rIGFueSBvYXV0 aF90b2tlbiBpbnRvIHRoZSBQR2Nvbm4gaW1tZWRpYXRlbHkgc28gdGhhdAotCQkJCSAqIHRoZSBh bGxvY2F0aW9uIGlzbid0IGxvc3QgaW4gY2FzZSBvZiBhbiBlcnJvci4KKwkJCQkgKiBIb29rIGFu eSBvYXV0aF90b2tlbiBpbnRvIHRoZSByZXF1ZXN0IHN0cnVjdCBpbW1lZGlhdGVseSBzbworCQkJ CSAqIHRoYXQgdGhlIGFsbG9jYXRpb24gaXNuJ3QgbG9zdCBpbiBjYXNlIG9mIGFuIGVycm9yLgog CQkJCSAqLwotCQkJCXNldF9jb25uX29hdXRoX3Rva2VuKGNvbm4sIG9hdXRoX3Rva2VuKTsKKwkJ CQlyZXF1ZXN0LT52MS50b2tlbiA9IG9hdXRoX3Rva2VuOwogCiAJCQkJaWYgKCFhY3R4LT51c2Vy X3Byb21wdGVkKQogCQkJCXsKQEAgLTI5NjEsNyArMjk1NSw3IEBAIHBnX2ZlX3J1bl9vYXV0aF9m bG93X2ltcGwoUEdjb25uICpjb25uKQogCQkJCSAqIHRoZSBjbGllbnQgd2FpdCBkaXJlY3RseSBv biB0aGUgdGltZXJmZCByYXRoZXIgdGhhbiB0aGUKIAkJCQkgKiBtdWx0aXBsZXhlci4KIAkJCQkg Ki8KLQkJCQlzZXRfY29ubl9hbHRzb2NrKGNvbm4sIGFjdHgtPnRpbWVyZmQpOworCQkJCSphbHRz b2NrID0gYWN0eC0+dGltZXJmZDsKIAogCQkJCWFjdHgtPnN0ZXAgPSBPQVVUSF9TVEVQX1dBSVRf SU5URVJWQUw7CiAJCQkJYWN0eC0+cnVubmluZyA9IDE7CkBAIC0yOTg3LDQ4ICsyOTgxLDIxIEBA IHBnX2ZlX3J1bl9vYXV0aF9mbG93X2ltcGwoUEdjb25uICpjb25uKQogCXJldHVybiBvYXV0aF90 b2tlbiA/IFBHUkVTX1BPTExJTkdfT0sgOiBQR1JFU19QT0xMSU5HX1JFQURJTkc7CiAKIGVycm9y X3JldHVybjoKLQllcnJidWYgPSBjb25uX2Vycm9yTWVzc2FnZShjb25uKTsKLQotCS8qCi0JICog QXNzZW1ibGUgdGhlIHRocmVlIHBhcnRzIG9mIG91ciBlcnJvcjogY29udGV4dCwgYm9keSwgYW5k IGRldGFpbC4gU2VlCi0JICogYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBmb3Igc3RydWN0IGFzeW5j X2N0eC4KLQkgKi8KLQlpZiAoYWN0eC0+ZXJyY3R4KQotCQlhcHBlbmRQUUV4cEJ1ZmZlcihlcnJi dWYsICIlczogIiwgbGlicHFfZ2V0dGV4dChhY3R4LT5lcnJjdHgpKTsKLQotCWlmIChQUUV4cEJ1 ZmZlckRhdGFCcm9rZW4oYWN0eC0+ZXJyYnVmKSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoZXJy YnVmLCBsaWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVtb3J5IikpOwotCWVsc2UKLQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoZXJyYnVmLCBhY3R4LT5lcnJidWYuZGF0YSk7Ci0KLQlpZiAoYWN0eC0+Y3Vy bF9lcnJbMF0pCi0JewotCQlhcHBlbmRQUUV4cEJ1ZmZlcihlcnJidWYsICIgKGxpYmN1cmw6ICVz KSIsIGFjdHgtPmN1cmxfZXJyKTsKLQotCQkvKiBTb21ldGltZXMgbGliY3VybCBhZGRzIGEgbmV3 bGluZSB0byB0aGUgZXJyb3IgYnVmZmVyLiA6KCAqLwotCQlpZiAoZXJyYnVmLT5sZW4gPj0gMiAm JiBlcnJidWYtPmRhdGFbZXJyYnVmLT5sZW4gLSAyXSA9PSAnXG4nKQotCQl7Ci0JCQllcnJidWYt PmRhdGFbZXJyYnVmLT5sZW4gLSAyXSA9ICcpJzsKLQkJCWVycmJ1Zi0+ZGF0YVtlcnJidWYtPmxl biAtIDFdID0gJ1wwJzsKLQkJCWVycmJ1Zi0+bGVuLS07Ci0JCX0KLQl9Ci0KLQlhcHBlbmRQUUV4 cEJ1ZmZlckNoYXIoZXJyYnVmLCAnXG4nKTsKKwlhcHBlbmRfYWN0eF9lcnJvcihyZXF1ZXN0LCBh Y3R4KTsKIAogCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKIH0KIAogLyoKLSAqIFRoZSB0 b3AtbGV2ZWwgZW50cnkgcG9pbnQuIFRoaXMgaXMgYSBjb252ZW5pZW50IHBsYWNlIHRvIHB1dCBu ZWNlc3NhcnkKLSAqIHdyYXBwZXIgbG9naWMgYmVmb3JlIGhhbmRpbmcgb2ZmIHRvIHRoZSB0cnVl IGltcGxlbWVudGF0aW9uLCBhYm92ZS4KKyAqIFRoZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQgZm9y IHRoZSBmbG93LiBUaGlzIGlzIGEgY29udmVuaWVudCBwbGFjZSB0byBwdXQKKyAqIG5lY2Vzc2Fy eSB3cmFwcGVyIGxvZ2ljIGJlZm9yZSBoYW5kaW5nIG9mZiB0byB0aGUgdHJ1ZSBpbXBsZW1lbnRh dGlvbiwgYWJvdmUuCiAgKi8KLVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKLXBnX2ZlX3J1bl9v YXV0aF9mbG93KFBHY29ubiAqY29ubikKK3N0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBl CitwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4sIHN0cnVjdCBQR29hdXRoQmVhcmVy UmVxdWVzdCAqcmVxdWVzdCwKKwkJCQkJIGludCAqYWx0c29jaykKIHsKIAlQb3N0Z3Jlc1BvbGxp bmdTdGF0dXNUeXBlIHJlc3VsdDsKLQlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBjb25uX3Nhc2xf c3RhdGUoY29ubik7Ci0Jc3RydWN0IGFzeW5jX2N0eCAqYWN0eDsKKwlzdHJ1Y3QgYXN5bmNfY3R4 ICphY3R4ID0gcmVxdWVzdC0+dXNlcjsKICNpZm5kZWYgV0lOMzIKIAlzaWdzZXRfdAlvc2lnc2V0 OwogCWJvb2wJCXNpZ3BpcGVfcGVuZGluZzsKQEAgLTMwNTUsMjAgKzMwMjIsMTYgQEAgcGdfZmVf cnVuX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogCW1hc2tlZCA9IChwcV9ibG9ja19zaWdwaXBl KCZvc2lnc2V0LCAmc2lncGlwZV9wZW5kaW5nKSA9PSAwKTsKICNlbmRpZgogCi0JcmVzdWx0ID0g cGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChjb25uKTsKKwlyZXN1bHQgPSBwZ19mZV9ydW5fb2F1 dGhfZmxvd19pbXBsKGNvbm4sCisJCQkJCQkJCQkgICAoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAq KSByZXF1ZXN0LAorCQkJCQkJCQkJICAgYWx0c29jayk7CiAKIAkvKgogCSAqIFRvIGFzc2lzdCB3 aXRoIGZpbmRpbmcgYnVncyBpbiBjb21iX211bHRpcGxleGVyKCkgYW5kCiAJICogZHJhaW5fdGlt ZXJfZXZlbnRzKCksIHdoZW4gd2UncmUgaW4gZGVidWcgbW9kZSwgdHJhY2sgdGhlIHRvdGFsIG51 bWJlcgogCSAqIG9mIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHByaW50IHRoYXQgYXQgdGhl IGVuZCBvZiB0aGUgZmxvdy4KLQkgKgotCSAqIEJlIGNhcmVmdWwgdGhhdCBzdGF0ZS0+YXN5bmNf Y3R4IGNvdWxkIGJlIE5VTEwgaWYgZWFybHkgaW5pdGlhbGl6YXRpb24KLQkgKiBmYWlscyBkdXJp bmcgdGhlIGZpcnN0IGNhbGwuCiAJICovCi0JYWN0eCA9IHN0YXRlLT5hc3luY19jdHg7Ci0JQXNz ZXJ0KGFjdHggfHwgcmVzdWx0ID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKTsKLQotCWlmIChhY3R4 ICYmIGFjdHgtPmRlYnVnZ2luZykKKwlpZiAoYWN0eC0+ZGVidWdnaW5nKQogCXsKIAkJYWN0eC0+ ZGJnX251bV9jYWxscysrOwogCQlpZiAocmVzdWx0ID09IFBHUkVTX1BPTExJTkdfT0sgfHwgcmVz dWx0ID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKQpAQCAtMzA4OSwzICszMDUyLDEwMyBAQCBwZ19m ZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAKIAlyZXR1cm4gcmVzdWx0OwogfQorCisv KgorICogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZvciBPQVVUSEJFQVJFUi4gbGlicHEgY2FsbHMg dGhpcyBvbmNlIHBlciBPQXV0aAorICogY29ubmVjdGlvbi4KKyAqLworaW50CitwZ19zdGFydF9v YXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3Qp Cit7CisJc3RydWN0IGFzeW5jX2N0eCAqYWN0eDsKKworCWlmICghaW5pdGlhbGl6ZV9jdXJsKHJl cXVlc3QpKQkvKiBUT0RPIG1vdmUgdG8gaW5pdCBmdW5jdGlvbj8gKi8KKwkJcmV0dXJuIC0xOwor CisJLyoKKwkgKiBDcmVhdGUgb3VyIGFzeW5jaHJvbm91cyBzdGF0ZSwgYW5kIGhvb2sgaXQgaW50 byB0aGUgdXBwZXItbGV2ZWwgT0F1dGgKKwkgKiBzdGF0ZSBpbW1lZGlhdGVseSwgc28gYW55IGZh aWx1cmVzIGJlbG93IHdvbid0IGxlYWsgdGhlIGNvbnRleHQKKwkgKiBhbGxvY2F0aW9uLgorCSAq LworCWFjdHggPSBjYWxsb2MoMSwgc2l6ZW9mKCphY3R4KSk7CisJaWYgKCFhY3R4KQorCQlnb3Rv IG9vbTsKKworCWFjdHgtPm11eCA9IFBHSU5WQUxJRF9TT0NLRVQ7CisJYWN0eC0+dGltZXJmZCA9 IC0xOworCisJLyoKKwkgKiBOb3cgd2UgaGF2ZSBhIHZhbGlkIChidXQgc3RpbGwgdXNlbGVzcykg YWN0eCwgc28gd2UgY2FuIGZpbGwgaW4gdGhlCisJICogcmVxdWVzdCBvYmplY3QuIEZyb20gdGhp cyBwb2ludCBvbndhcmQsIGZhaWx1cmVzIHdpbGwgcmVzdWx0IGluIGEgY2FsbAorCSAqIHRvIHBn X2ZlX2NsZWFudXBfb2F1dGhfZmxvdygpLiBGdXJ0aGVyIGNsZWFudXAgbG9naWMgYmVsb25ncyB0 aGVyZS4KKwkgKi8KKwlyZXF1ZXN0LT52MS5hc3luYyA9IHBnX2ZlX3J1bl9vYXV0aF9mbG93Owor CXJlcXVlc3QtPnYxLmNsZWFudXAgPSBwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3c7CisJcmVxdWVz dC0+djEudXNlciA9IGFjdHg7CisKKwkvKgorCSAqIE5vdyBmaW5pc2ggZmlsbGluZyBpbiB0aGUg YWN0eC4KKwkgKi8KKworCS8qIFNob3VsZCB3ZSBlbmFibGUgdW5zYWZlIGZlYXR1cmVzPyAqLwor CWFjdHgtPmRlYnVnZ2luZyA9IG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCgpOworCisJ aW5pdFBRRXhwQnVmZmVyKCZhY3R4LT53b3JrX2RhdGEpOworCWluaXRQUUV4cEJ1ZmZlcigmYWN0 eC0+ZXJyYnVmKTsKKworCS8qIFB1bGwgcmVsZXZhbnQgY29ubmVjdGlvbiBvcHRpb25zLiAqLwor CXsKKwkJUFFjb25uaW5mb09wdGlvbiAqY29ubmluZm8gPSBQUWNvbm5pbmZvKGNvbm4pOworCisJ CWlmICghY29ubmluZm8pCisJCQlnb3RvIG9vbTsKKworCQlmb3IgKFBRY29ubmluZm9PcHRpb24g Km9wdCA9IGNvbm5pbmZvOyBvcHQtPmtleXdvcmQ7IG9wdCsrKQorCQl7CisJCQlpZiAoIW9wdC0+ dmFsKQorCQkJCWNvbnRpbnVlOwkJLyogc2ltcGxpZmllcyB0aGUgc3RyZHVwIGxvZ2ljIGJlbG93 ICovCisKKwkJCWlmIChzdHJjbXAob3B0LT5rZXl3b3JkLCAib2F1dGhfY2xpZW50X2lkIikgPT0g MCkKKwkJCXsKKwkJCQlhY3R4LT5jbGllbnRfaWQgPSBzdHJkdXAob3B0LT52YWwpOworCQkJCWlm ICghYWN0eC0+Y2xpZW50X2lkKQorCQkJCQlnb3RvIG9vbTsKKwkJCX0KKwkJCWVsc2UgaWYgKHN0 cmNtcChvcHQtPmtleXdvcmQsICJvYXV0aF9jbGllbnRfc2VjcmV0IikgPT0gMCkKKwkJCXsKKwkJ CQlhY3R4LT5jbGllbnRfc2VjcmV0ID0gc3RyZHVwKG9wdC0+dmFsKTsKKwkJCQlpZiAoIWFjdHgt PmNsaWVudF9zZWNyZXQpCisJCQkJCWdvdG8gb29tOworCQkJfQorCQl9CisKKwkJUFFjb25uaW5m b0ZyZWUoY29ubmluZm8pOworCX0KKworCWFjdHgtPmRpc2NvdmVyeV91cmkgPSByZXF1ZXN0LT52 MS5vcGVuaWRfY29uZmlndXJhdGlvbjsKKwlhY3R4LT5pc3N1ZXJfaWQgPSByZXF1ZXN0LT5pc3N1 ZXI7CisJYWN0eC0+c2NvcGUgPSByZXF1ZXN0LT52MS5zY29wZTsKKworCUFzc2VydChhY3R4LT5j bGllbnRfaWQpOwkvKiBlbnN1cmVkIGJ5IHNldHVwX29hdXRoX3BhcmFtZXRlcnMoKSAqLworCUFz c2VydChhY3R4LT5pc3N1ZXJfaWQpOwkvKiBlbnN1cmVkIGJ5IHNldHVwX29hdXRoX3BhcmFtZXRl cnMoKSAqLworCUFzc2VydChhY3R4LT5kaXNjb3ZlcnlfdXJpKTsJLyogZW5zdXJlZCBieSBvYXV0 aF9leGNoYW5nZSgpICovCisKKwlpZiAoIXNldHVwX211bHRpcGxleGVyKGFjdHgpKQorCXsKKwkJ YXBwZW5kX2FjdHhfZXJyb3IocmVxdWVzdCwgYWN0eCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlp ZiAoIXNldHVwX2N1cmxfaGFuZGxlcyhhY3R4KSkKKwl7CisJCWFwcGVuZF9hY3R4X2Vycm9yKHJl cXVlc3QsIGFjdHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7CisKK29vbToKKwlh cHBlbmRQUUV4cEJ1ZmZlclN0cihyZXF1ZXN0LT5lcnJvciwKKwkJCQkJCSBsaWJwcV9nZXR0ZXh0 KCJvdXQgb2YgbWVtb3J5IikpOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1v YXV0aC9vYXV0aC11dGlscy5jCmluZGV4IDQ1ZmRjNzU3OWYyLi5mMWQzMGUwMWNmMCAxMDA2NDQK LS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuYworKysgYi9zcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC11dGlscy5jCkBAIC0zNSwxNyArMzUsNiBAQAog cGd0aHJlYWRsb2NrX3QgcGdfZ190aHJlYWRsb2NrOwogc3RhdGljIGxpYnBxX2dldHRleHRfZnVu YyBsaWJwcV9nZXR0ZXh0X2ltcGw7CiAKLWNvbm5fZXJyb3JNZXNzYWdlX2Z1bmMgY29ubl9lcnJv ck1lc3NhZ2U7Ci1jb25uX29hdXRoX2NsaWVudF9pZF9mdW5jIGNvbm5fb2F1dGhfY2xpZW50X2lk OwotY29ubl9vYXV0aF9jbGllbnRfc2VjcmV0X2Z1bmMgY29ubl9vYXV0aF9jbGllbnRfc2VjcmV0 OwotY29ubl9vYXV0aF9kaXNjb3ZlcnlfdXJpX2Z1bmMgY29ubl9vYXV0aF9kaXNjb3ZlcnlfdXJp OwotY29ubl9vYXV0aF9pc3N1ZXJfaWRfZnVuYyBjb25uX29hdXRoX2lzc3Vlcl9pZDsKLWNvbm5f b2F1dGhfc2NvcGVfZnVuYyBjb25uX29hdXRoX3Njb3BlOwotY29ubl9zYXNsX3N0YXRlX2Z1bmMg Y29ubl9zYXNsX3N0YXRlOwotCi1zZXRfY29ubl9hbHRzb2NrX2Z1bmMgc2V0X2Nvbm5fYWx0c29j azsKLXNldF9jb25uX29hdXRoX3Rva2VuX2Z1bmMgc2V0X2Nvbm5fb2F1dGhfdG9rZW47Ci0KIC8q LQogICogSW5pdGlhbGl6ZXMgbGlicHEtb2F1dGggYnkgc2V0dGluZyBuZWNlc3NhcnkgY2FsbGJh Y2tzLgogICoKQEAgLTYzLDU3ICs1MiwxMCBAQCBzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5jIHNl dF9jb25uX29hdXRoX3Rva2VuOwogICovCiB2b2lkCiBsaWJwcV9vYXV0aF9pbml0KHBndGhyZWFk bG9ja190IHRocmVhZGxvY2tfaW1wbCwKLQkJCQkgbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRf aW1wbCwKLQkJCQkgY29ubl9lcnJvck1lc3NhZ2VfZnVuYyBlcnJtc2dfaW1wbCwKLQkJCQkgY29u bl9vYXV0aF9jbGllbnRfaWRfZnVuYyBjbGllbnRpZF9pbXBsLAotCQkJCSBjb25uX29hdXRoX2Ns aWVudF9zZWNyZXRfZnVuYyBjbGllbnRzZWNyZXRfaW1wbCwKLQkJCQkgY29ubl9vYXV0aF9kaXNj b3ZlcnlfdXJpX2Z1bmMgZGlzY292ZXJ5dXJpX2ltcGwsCi0JCQkJIGNvbm5fb2F1dGhfaXNzdWVy X2lkX2Z1bmMgaXNzdWVyaWRfaW1wbCwKLQkJCQkgY29ubl9vYXV0aF9zY29wZV9mdW5jIHNjb3Bl X2ltcGwsCi0JCQkJIGNvbm5fc2FzbF9zdGF0ZV9mdW5jIHNhc2xzdGF0ZV9pbXBsLAotCQkJCSBz ZXRfY29ubl9hbHRzb2NrX2Z1bmMgc2V0YWx0c29ja19pbXBsLAotCQkJCSBzZXRfY29ubl9vYXV0 aF90b2tlbl9mdW5jIHNldHRva2VuX2ltcGwpCisJCQkJIGxpYnBxX2dldHRleHRfZnVuYyBnZXR0 ZXh0X2ltcGwpCiB7CiAJcGdfZ190aHJlYWRsb2NrID0gdGhyZWFkbG9ja19pbXBsOwogCWxpYnBx X2dldHRleHRfaW1wbCA9IGdldHRleHRfaW1wbDsKLQljb25uX2Vycm9yTWVzc2FnZSA9IGVycm1z Z19pbXBsOwotCWNvbm5fb2F1dGhfY2xpZW50X2lkID0gY2xpZW50aWRfaW1wbDsKLQljb25uX29h dXRoX2NsaWVudF9zZWNyZXQgPSBjbGllbnRzZWNyZXRfaW1wbDsKLQljb25uX29hdXRoX2Rpc2Nv dmVyeV91cmkgPSBkaXNjb3Zlcnl1cmlfaW1wbDsKLQljb25uX29hdXRoX2lzc3Vlcl9pZCA9IGlz c3VlcmlkX2ltcGw7Ci0JY29ubl9vYXV0aF9zY29wZSA9IHNjb3BlX2ltcGw7Ci0JY29ubl9zYXNs X3N0YXRlID0gc2FzbHN0YXRlX2ltcGw7Ci0Jc2V0X2Nvbm5fYWx0c29jayA9IHNldGFsdHNvY2tf aW1wbDsKLQlzZXRfY29ubl9vYXV0aF90b2tlbiA9IHNldHRva2VuX2ltcGw7Ci19Ci0KLS8qCi0g KiBBcHBlbmQgYSBmb3JtYXR0ZWQgc3RyaW5nIHRvIHRoZSBlcnJvciBtZXNzYWdlIGJ1ZmZlciBv ZiB0aGUgZ2l2ZW4KLSAqIGNvbm5lY3Rpb24sIGFmdGVyIHRyYW5zbGF0aW5nIGl0LiAgVGhpcyBp cyBhIGNvcHkgb2YgbGlicHEncyBpbnRlcm5hbCBBUEkuCi0gKi8KLXZvaWQKLWxpYnBxX2FwcGVu ZF9jb25uX2Vycm9yKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZm10LC4uLikKLXsKLQlpbnQJ CQlzYXZlX2Vycm5vID0gZXJybm87Ci0JYm9vbAkJZG9uZTsKLQl2YV9saXN0CQlhcmdzOwotCVBR RXhwQnVmZmVyIGVycm9yTWVzc2FnZSA9IGNvbm5fZXJyb3JNZXNzYWdlKGNvbm4pOwotCi0JQXNz ZXJ0KGZtdFtzdHJsZW4oZm10KSAtIDFdICE9ICdcbicpOwotCi0JaWYgKFBRRXhwQnVmZmVyQnJv a2VuKGVycm9yTWVzc2FnZSkpCi0JCXJldHVybjsJCQkJCS8qIGFscmVhZHkgZmFpbGVkICovCi0K LQkvKiBMb29wIGluIGNhc2Ugd2UgaGF2ZSB0byByZXRyeSBhZnRlciBlbmxhcmdpbmcgdGhlIGJ1 ZmZlci4gKi8KLQlkbwotCXsKLQkJZXJybm8gPSBzYXZlX2Vycm5vOwotCQl2YV9zdGFydChhcmdz LCBmbXQpOwotCQlkb25lID0gYXBwZW5kUFFFeHBCdWZmZXJWQShlcnJvck1lc3NhZ2UsIGxpYnBx X2dldHRleHQoZm10KSwgYXJncyk7Ci0JCXZhX2VuZChhcmdzKTsKLQl9IHdoaWxlICghZG9uZSk7 Ci0KLQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoZXJyb3JNZXNzYWdlLCAnXG4nKTsKIH0KIAogI2lm ZGVmIEVOQUJMRV9OTFMKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgt b2F1dGguYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYwppbmRleCAyNjVl YzQzMDM1YS4uYWM2OGI0YmQzZWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGgtb2F1dGguYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMK QEAgLTc4LDcgKzc4LDcgQEAgb2F1dGhfaW5pdChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBh c3N3b3JkLAogICogVGhpcyBoYW5kbGVzIG9ubHkgbWVjaGFuaXNtIHN0YXRlIHRpZWQgdG8gdGhl IGNvbm5lY3Rpb24gbGlmZXRpbWU7IHN0YXRlCiAgKiBzdG9yZWQgaW4gc3RhdGUtPmFzeW5jX2N0 eCBpcyBmcmVlZCB1cCBlaXRoZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCiAgKiBhdXRoZW50aWNh dGlvbiBoYW5kc2hha2Ugc3VjY2VlZHMsIG9yIGJlZm9yZSB0aGUgbWVjaGFuaXNtIGlzIGNsZWFu ZWQgdXAgb24KLSAqIGZhaWx1cmUuIFNlZSBwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3coKSBhbmQg Y2xlYW51cF91c2VyX29hdXRoX2Zsb3coKS4KKyAqIGZhaWx1cmUuIFNlZSBwZ19mZV9jbGVhbnVw X29hdXRoX2Zsb3coKSBhbmQgY2xlYW51cF9vYXV0aF9mbG93KCkuCiAgKi8KIHN0YXRpYyB2b2lk CiBvYXV0aF9mcmVlKHZvaWQgKm9wYXEpCkBAIC02NjksMTIgKzY2OSwxMyBAQCBjbGVhbnVwOgog fQogCiAvKgotICogSGVscGVyIGZvciBoYW5kbGluZyB1c2VyIGZsb3cgZmFpbHVyZXMuIElmIHRo ZSBpbXBsZW1lbnRhdGlvbiBwdXQgYW55dGhpbmcKLSAqIGludG8gcmVxdWVzdC0+ZXJyb3IsIGl0 J3MgYWRkZWQgdG8gY29ubi0+ZXJyb3JNZXNzYWdlIGhlcmUuCisgKiBIZWxwZXIgZm9yIGhhbmRs aW5nIGZsb3cgZmFpbHVyZXMuIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBwdXQgYW55dGhpbmcgaW50 bworICogcmVxdWVzdC0+ZXJyb3IsIGl0J3MgYWRkZWQgdG8gY29ubi0+ZXJyb3JNZXNzYWdlIGhl cmUuCiAgKi8KIHN0YXRpYyB2b2lkCi1yZXBvcnRfdXNlcl9mbG93X2Vycm9yKFBHY29ubiAqY29u biwgY29uc3QgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKK3JlcG9ydF9mbG93X2Vy cm9yKFBHY29ubiAqY29ubiwgY29uc3QgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkK IHsKKwlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBjb25uLT5zYXNsX3N0YXRlOwogCWNvbnN0IGNo YXIgKmVycm1zZyA9IE5VTEw7CiAKIAlpZiAoUFFFeHBCdWZmZXJCcm9rZW4ocmVxdWVzdC0+ZXJy b3IpKQpAQCAtNjgyLDI4ICs2ODMsNDkgQEAgcmVwb3J0X3VzZXJfZmxvd19lcnJvcihQR2Nvbm4g KmNvbm4sIGNvbnN0IFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCiAJZWxzZSBpZiAo cmVxdWVzdC0+ZXJyb3ItPmxlbikKIAkJZXJybXNnID0gcmVxdWVzdC0+ZXJyb3ItPmRhdGE7CiAK LQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJIGxpYnBx X2dldHRleHQoInVzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZCIpKTsKLQotCWlmIChlcnJt c2cpCisJLyoKKwkgKiBVc2VyLWRlZmluZWQgZmxvd3MgYXJlIGNhbGxlZCBvdXQgZXhwbGljaXRs eSBzbyB0aGF0IHRoZSB1c2VyIGtub3dzIHdobworCSAqIHRvIGJsYW1lLiBCdWlsdGluIGZsb3dz IGRvbid0IG5lZWQgdGhhdCBleHRyYSBtZXNzYWdlIGxlbmd0aDsgd2UgZXhwZWN0CisJICogdGhl bSB0byBhbHdheXMgZmlsbCBpbiByZXF1ZXN0LT5lcnJvciBvbiBmYWlsdXJlIGFueXdheS4KKwkg Ki8KKwlpZiAoc3RhdGUtPmJ1aWx0aW4pCiAJewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29u bi0+ZXJyb3JNZXNzYWdlLCAiOiAiKTsKKwkJaWYgKCFlcnJtc2cpCisJCXsKKwkJCS8qCisJCQkg KiBEb24ndCB0dXJuIGEgYnVnIGhlcmUgaW50byBhIGNyYXNoIGluIHByb2R1Y3Rpb24sIGJ1dCBk b24ndAorCQkJICogYm90aGVyIHRyYW5zbGF0aW5nIGVpdGhlci4KKwkJCSAqLworCQkJQXNzZXJ0 KGZhbHNlKTsKKwkJCWVycm1zZyA9ICJidWlsdGluIGZsb3cgZmFpbGVkIGJ1dCBkaWQgbm90IHBy b3ZpZGUgYW4gZXJyb3IgbWVzc2FnZSI7CisJCX0KKwogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y29ubi0+ZXJyb3JNZXNzYWdlLCBlcnJtc2cpOwogCX0KKwllbHNlCisJeworCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJ1 c2VyLWRlZmluZWQgT0F1dGggZmxvdyBmYWlsZWQiKSk7CisJCWlmIChlcnJtc2cpCisJCXsKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsICI6ICIpOworCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwgZXJybXNnKTsKKwkJfQorCX0K IAogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcigmY29ubi0+ZXJyb3JNZXNzYWdlLCAnXG4nKTsKIH0K IAogLyoKLSAqIENhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGNvbm4tPmFzeW5jX2F1dGgoKSBm b3IgYSB1c2VyLWRlZmluZWQgT0F1dGggZmxvdy4KLSAqIERlbGVnYXRlcyB0aGUgcmV0cmlldmFs IG9mIHRoZSB0b2tlbiB0byB0aGUgYXBwbGljYXRpb24ncyBhc3luYyBjYWxsYmFjay4KKyAqIENh bGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGNvbm4tPmFzeW5jX2F1dGgoKSBmb3IgT0F1dGggZmxv d3MuIERlbGVnYXRlcyB0aGUKKyAqIHJldHJpZXZhbCBvZiB0aGUgdG9rZW4gdG8gdGhlIFBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIuYXN5bmMoKSBjYWxsYmFjay4KICAqCi0gKiBUaGlzIHdpbGwgYmUg Y2FsbGVkIG11bHRpcGxlIHRpbWVzIGFzIG5lZWRlZDsgdGhlIGFwcGxpY2F0aW9uIGlzIHJlc3Bv bnNpYmxlCi0gKiBmb3Igc2V0dGluZyBhbiBhbHRzb2NrIHRvIHNpZ25hbCBhbmQgcmV0dXJuaW5n IHRoZSBjb3JyZWN0IFBHUkVTX1BPTExJTkdfKgorICogVGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0 aXBsZSB0aW1lcyBhcyBuZWVkZWQ7IHRoZSBjYWxsYmFjayBpcyByZXNwb25zaWJsZSBmb3IKKyAq IHNldHRpbmcgYW4gYWx0c29jayB0byBzaWduYWwgYW5kIHJldHVybmluZyB0aGUgY29ycmVjdCBQ R1JFU19QT0xMSU5HXyoKICAqIHN0YXR1c2VzIGZvciB1c2UgYnkgUFFjb25uZWN0UG9sbCgpLgog ICovCiBzdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZQotcnVuX3VzZXJfb2F1dGhfZmxv dyhQR2Nvbm4gKmNvbm4pCitydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiB7CiAJZmVfb2F1 dGhfc3RhdGUgKnN0YXRlID0gY29ubi0+c2FzbF9zdGF0ZTsKIAlQR29hdXRoQmVhcmVyUmVxdWVz dFYyICpyZXF1ZXN0ID0gc3RhdGUtPmFzeW5jX2N0eDsKQEAgLTcxMSw2ICs3MzMsNyBAQCBydW5f dXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIAogCWlmICghcmVxdWVzdC0+djEuYXN5bmMp CiAJeworCQlBc3NlcnQoIXN0YXRlLT5idWlsdGluKTsJLyogYmUgdmVyeSBub2lzeSBpZiBvdXIg Y29kZSBkb2VzIHRoaXMgKi8KIAkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKIAkJCQkJ CQkJInVzZXItZGVmaW5lZCBPQXV0aCBmbG93IHByb3ZpZGVkIG5laXRoZXIgYSB0b2tlbiBub3Ig YW4gYXN5bmMgY2FsbGJhY2siKTsKIAkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwpAQCAt NzIyLDcgKzc0NSw3IEBAIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogCiAJaWYg KHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX0ZBSUxFRCkKIAl7Ci0JCXJlcG9ydF91c2VyX2Zsb3df ZXJyb3IoY29ubiwgcmVxdWVzdCk7CisJCXJlcG9ydF9mbG93X2Vycm9yKGNvbm4sIHJlcXVlc3Qp OwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAllbHNlIGlmIChzdGF0dXMgPT0gUEdSRVNfUE9MTElO R19PSykKQEAgLTczNCw2ICs3NTcsNyBAQCBydW5fdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29u bikKIAkJICovCiAJCWlmICghcmVxdWVzdC0+djEudG9rZW4pCiAJCXsKKwkJCUFzc2VydCghc3Rh dGUtPmJ1aWx0aW4pOwogCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKIAkJCQkJCQkJ CSJ1c2VyLWRlZmluZWQgT0F1dGggZmxvdyBkaWQgbm90IHByb3ZpZGUgYSB0b2tlbiIpOwogCQkJ cmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwpAQCAtNzUyLDYgKzc3Niw3IEBAIHJ1bl91c2Vy X29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogCS8qIFRoZSBob29rIHdhbnRzIHRoZSBjbGllbnQg dG8gcG9sbCB0aGUgYWx0c29jay4gTWFrZSBzdXJlIGl0IHNldCBvbmUuICovCiAJaWYgKGNvbm4t PmFsdHNvY2sgPT0gUEdJTlZBTElEX1NPQ0tFVCkKIAl7CisJCUFzc2VydCghc3RhdGUtPmJ1aWx0 aW4pOwogCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAogCQkJCQkJCQkidXNlci1kZWZp bmVkIE9BdXRoIGZsb3cgZGlkIG5vdCBwcm92aWRlIGEgc29ja2V0IGZvciBwb2xsaW5nIik7CiAJ CXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKQEAgLTc2MSwxMiArNzg2LDE2IEBAIHJ1bl91 c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogfQogCiAvKgotICogQ2xlYW51cCBjYWxsYmFj ayBmb3IgdGhlIGFzeW5jIHVzZXIgZmxvdy4gRGVsZWdhdGVzIG1vc3Qgb2YgaXRzIGpvYiB0bwor ICogQ2xlYW51cCBjYWxsYmFjayBmb3IgdGhlIGFzeW5jIGZsb3cuIERlbGVnYXRlcyBtb3N0IG9m IGl0cyBqb2IgdG8KICAqIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIuY2xlYW51cCgpLCB0aGVuIGRp c2Nvbm5lY3RzIHRoZSBhbHRzb2NrIGFuZCBmcmVlcyB0aGUKICAqIHJlcXVlc3QgaXRzZWxmLgor ICoKKyAqIFRoaXMgaXMgY2FsbGVkIGVpdGhlciBhdCB0aGUgZW5kIG9mIGEgc3VjY2Vzc2Z1bCBh dXRoZW50aWNhdGlvbiwgb3IgZHVyaW5nCisgKiBwcURyb3BDb25uZWN0aW9uKCksIHNvIHdlIHdv bid0IGxlYWsgcmVzb3VyY2VzIGV2ZW4gaWYgUFFjb25uZWN0UG9sbCgpIG5ldmVyCisgKiBjYWxs cyB1cyBiYWNrLgogICovCiBzdGF0aWMgdm9pZAotY2xlYW51cF91c2VyX29hdXRoX2Zsb3coUEdj b25uICpjb25uKQorY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIHsKIAlmZV9vYXV0 aF9zdGF0ZSAqc3RhdGUgPSBjb25uLT5zYXNsX3N0YXRlOwogCVBHb2F1dGhCZWFyZXJSZXF1ZXN0 VjIgKnJlcXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OwpAQCAtNzg3LDEyICs4MTYsMTYgQEAgY2xl YW51cF91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogICoKICAqIFRoZXJlIGFyZSB0aHJl ZSBwb3RlbnRpYWwgaW1wbGVtZW50YXRpb25zIG9mIHVzZV9idWlsdGluX2Zsb3c6CiAgKgotICog MSkgSWYgdGhlIE9BdXRoIGNsaWVudCBpcyBkaXNhYmxlZCBhdCBjb25maWd1cmF0aW9uIHRpbWUs IHJldHVybiBmYWxzZS4KKyAqIDEpIElmIHRoZSBPQXV0aCBjbGllbnQgaXMgZGlzYWJsZWQgYXQg Y29uZmlndXJhdGlvbiB0aW1lLCByZXR1cm4gemVyby4KICAqICAgIERlcGVuZGVudCBjbGllbnRz IG11c3QgcHJvdmlkZSB0aGVpciBvd24gZmxvdy4KICAqIDIpIElmIHRoZSBPQXV0aCBjbGllbnQg aXMgZW5hYmxlZCBhbmQgVVNFX0RZTkFNSUNfT0FVVEggaXMgZGVmaW5lZCwgZGxvcGVuKCkKICAq ICAgIHRoZSBsaWJwcS1vYXV0aCBwbHVnaW4gYW5kIHVzZSBpdHMgaW1wbGVtZW50YXRpb24uCiAg KiAzKSBPdGhlcndpc2UsIHVzZSBmbG93IGNhbGxiYWNrcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxp bmtlZCBpbnRvIHRoZQogICogICAgZXhlY3V0YWJsZS4KKyAqCisgKiBGb3IgY2FsbGVyIGNvbnZl bmllbmNlLCB0aGUgcmV0dXJuIHZhbHVlIGZvbGxvd3MgdGhlIGNvbnZlbnRpb24gb2YKKyAqIFBR YXV0aERhdGFIb29rOiB6ZXJvIG1lYW5zIG5vIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkLCBu ZWdhdGl2ZSBpbmRpY2F0ZXMKKyAqIGZhaWx1cmUsIGFuZCBwb3NpdGl2ZSBpbmRpY2F0ZXMgc3Vj Y2Vzcy4KICAqLwogCiAjaWYgIWRlZmluZWQoVVNFX0xJQkNVUkwpCkBAIC04MDEsMTAgKzgzNCwx MCBAQCBjbGVhbnVwX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAgKiBUaGlzIGNvbmZp Z3VyYXRpb24gZG9lc24ndCBzdXBwb3J0IHRoZSBidWlsdGluIGZsb3cuCiAgKi8KIAotYm9vbAot dXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKK3N0 YXRpYyBpbnQKK3VzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAq c3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCiB7Ci0JcmV0dXJuIGZhbHNl OworCXJldHVybiAwOwogfQogCiAjZWxpZiBkZWZpbmVkKFVTRV9EWU5BTUlDX09BVVRIKQpAQCAt ODE1LDM2ICs4NDgsNiBAQCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhf c3RhdGUgKnN0YXRlKQogCiB0eXBlZGVmIGNoYXIgKigqbGlicHFfZ2V0dGV4dF9mdW5jKSAoY29u c3QgY2hhciAqbXNnaWQpOwogCi0vKgotICogRGVmaW5lIGFjY2Vzc29yL211dGF0b3Igc2hpbXMg dG8gaW5qZWN0IGludG8gbGlicHEtb2F1dGgsIHNvIHRoYXQgaXQgZG9lc24ndAotICogZGVwZW5k IG9uIHRoZSBvZmZzZXRzIHdpdGhpbiBQR2Nvbm4uIChUaGVzZSBoYXZlIGNoYW5nZWQgZHVyaW5n IG1pbm9yIHZlcnNpb24KLSAqIHVwZGF0ZXMgaW4gdGhlIHBhc3QuKQotICovCi0KLSNkZWZpbmUg REVGSU5FX0dFVFRFUihUWVBFLCBNRU1CRVIpIFwKLQl0eXBlZGVmIFRZUEUgKCpjb25uXyAjIyBN RU1CRVIgIyMgX2Z1bmMpIChQR2Nvbm4gKmNvbm4pOyBcCi0Jc3RhdGljIFRZUEUgY29ubl8gIyMg TUVNQkVSKFBHY29ubiAqY29ubikgeyByZXR1cm4gY29ubi0+TUVNQkVSOyB9Ci0KLS8qIExpa2Ug REVGSU5FX0dFVFRFUiwgYnV0IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBtZW1iZXIuICovCi0j ZGVmaW5lIERFRklORV9HRVRURVJfUChUWVBFLCBNRU1CRVIpIFwKLQl0eXBlZGVmIFRZUEUgKCpj b25uXyAjIyBNRU1CRVIgIyMgX2Z1bmMpIChQR2Nvbm4gKmNvbm4pOyBcCi0Jc3RhdGljIFRZUEUg Y29ubl8gIyMgTUVNQkVSKFBHY29ubiAqY29ubikgeyByZXR1cm4gJmNvbm4tPk1FTUJFUjsgfQot Ci0jZGVmaW5lIERFRklORV9TRVRURVIoVFlQRSwgTUVNQkVSKSBcCi0JdHlwZWRlZiB2b2lkICgq c2V0X2Nvbm5fICMjIE1FTUJFUiAjIyBfZnVuYykgKFBHY29ubiAqY29ubiwgVFlQRSB2YWwpOyBc Ci0Jc3RhdGljIHZvaWQgc2V0X2Nvbm5fICMjIE1FTUJFUihQR2Nvbm4gKmNvbm4sIFRZUEUgdmFs KSB7IGNvbm4tPk1FTUJFUiA9IHZhbDsgfQotCi1ERUZJTkVfR0VUVEVSX1AoUFFFeHBCdWZmZXIs IGVycm9yTWVzc2FnZSk7Ci1ERUZJTkVfR0VUVEVSKGNoYXIgKiwgb2F1dGhfY2xpZW50X2lkKTsK LURFRklORV9HRVRURVIoY2hhciAqLCBvYXV0aF9jbGllbnRfc2VjcmV0KTsKLURFRklORV9HRVRU RVIoY2hhciAqLCBvYXV0aF9kaXNjb3ZlcnlfdXJpKTsKLURFRklORV9HRVRURVIoY2hhciAqLCBv YXV0aF9pc3N1ZXJfaWQpOwotREVGSU5FX0dFVFRFUihjaGFyICosIG9hdXRoX3Njb3BlKTsKLURF RklORV9HRVRURVIoZmVfb2F1dGhfc3RhdGUgKiwgc2FzbF9zdGF0ZSk7Ci0KLURFRklORV9TRVRU RVIocGdzb2NrZXQsIGFsdHNvY2spOwotREVGSU5FX1NFVFRFUihjaGFyICosIG9hdXRoX3Rva2Vu KTsKLQogLyoKICAqIExvYWRzIHRoZSBsaWJwcS1vYXV0aCBwbHVnaW4gdmlhIGRsb3BlbigpLCBp bml0aWFsaXplcyBpdCwgYW5kIHBsdWdzIGl0cwogICogY2FsbGJhY2tzIGludG8gdGhlIGNvbm5l Y3Rpb24ncyBhc3luYyBhdXRoIGhhbmRsZXJzLgpAQCAtODUzLDI3ICs4NTYsMjAgQEAgREVGSU5F X1NFVFRFUihjaGFyICosIG9hdXRoX3Rva2VuKTsKICAqIGhhbmRsZSB0aGUgdXNlIGNhc2Ugd2hl cmUgdGhlIGJ1aWxkIHN1cHBvcnRzIGxvYWRpbmcgYSBmbG93IGJ1dCBhIHVzZXIgZG9lcwogICog bm90IHdhbnQgdG8gaW5zdGFsbCBpdC4gVHJvdWJsZXNob290aW5nIG9mIGxpbmtlci9sb2FkZXIg ZmFpbHVyZXMgY2FuIGJlIGRvbmUKICAqIHZpYSBQR09BVVRIREVCVUcuCisgKgorICogVGhlIGxp ZmV0aW1lIG9mICpyZXF1ZXN0IGVuZHMgc2hvcnRseSBhZnRlciB0aGlzIGNhbGwsIHNvIGl0IG11 c3QgYmUgY29waWVkCisgKiB0byBsb25nZXItbGl2ZWQgc3RvcmFnZS4KICAqLwotYm9vbAotdXNl X2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKK3N0YXRp YyBpbnQKK3VzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3Rh dGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCiB7CiAJc3RhdGljIGJvb2wgaW5p dGlhbGl6ZWQgPSBmYWxzZTsKIAlzdGF0aWMgcHRocmVhZF9tdXRleF90IGluaXRfbXV0ZXggPSBQ VEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogCWludAkJCWxvY2tlcnI7CiAKIAl2b2lkCQkoKmlu aXQpIChwZ3RocmVhZGxvY2tfdCB0aHJlYWRsb2NrLAotCQkJCQkJIGxpYnBxX2dldHRleHRfZnVu YyBnZXR0ZXh0X2ltcGwsCi0JCQkJCQkgY29ubl9lcnJvck1lc3NhZ2VfZnVuYyBlcnJtc2dfaW1w bCwKLQkJCQkJCSBjb25uX29hdXRoX2NsaWVudF9pZF9mdW5jIGNsaWVudGlkX2ltcGwsCi0JCQkJ CQkgY29ubl9vYXV0aF9jbGllbnRfc2VjcmV0X2Z1bmMgY2xpZW50c2VjcmV0X2ltcGwsCi0JCQkJ CQkgY29ubl9vYXV0aF9kaXNjb3ZlcnlfdXJpX2Z1bmMgZGlzY292ZXJ5dXJpX2ltcGwsCi0JCQkJ CQkgY29ubl9vYXV0aF9pc3N1ZXJfaWRfZnVuYyBpc3N1ZXJpZF9pbXBsLAotCQkJCQkJIGNvbm5f b2F1dGhfc2NvcGVfZnVuYyBzY29wZV9pbXBsLAotCQkJCQkJIGNvbm5fc2FzbF9zdGF0ZV9mdW5j IHNhc2xzdGF0ZV9pbXBsLAotCQkJCQkJIHNldF9jb25uX2FsdHNvY2tfZnVuYyBzZXRhbHRzb2Nr X2ltcGwsCi0JCQkJCQkgc2V0X2Nvbm5fb2F1dGhfdG9rZW5fZnVuYyBzZXR0b2tlbl9pbXBsKTsK LQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlICgqZmxvdykgKFBHY29ubiAqY29ubik7Ci0Jdm9p ZAkJKCpjbGVhbnVwKSAoUEdjb25uICpjb25uKTsKKwkJCQkJCSBsaWJwcV9nZXR0ZXh0X2Z1bmMg Z2V0dGV4dF9pbXBsKTsKKwlpbnQJCQkoKnN0YXJ0X2Zsb3cpIChQR2Nvbm4gKmNvbm4sIFBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpOwogCiAJLyoKIAkgKiBPbiBtYWNPUyBvbmx5LCBs b2FkIHRoZSBtb2R1bGUgdXNpbmcgaXRzIGFic29sdXRlIGluc3RhbGwgcGF0aDsgdGhlCkBAIC04 ODYsOSArODgyLDkgQEAgdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0 YXRlICpzdGF0ZSkKIAkgKi8KIAljb25zdCBjaGFyICpjb25zdCBtb2R1bGVfbmFtZSA9CiAjaWYg ZGVmaW5lZChfX2Rhcndpbl9fKQotCQlMSUJESVIgIi9saWJwcS1vYXV0aC0iIFBHX01BSk9SVkVS U0lPTiBETFNVRkZJWDsKKwkJTElCRElSICIvbGlicHEtb2F1dGgiIERMU1VGRklYOwogI2Vsc2UK LQkJImxpYnBxLW9hdXRoLSIgUEdfTUFKT1JWRVJTSU9OIERMU1VGRklYOworCQkibGlicHEtb2F1 dGgiIERMU1VGRklYOwogI2VuZGlmCiAKIAlzdGF0ZS0+YnVpbHRpbl9mbG93ID0gZGxvcGVuKG1v ZHVsZV9uYW1lLCBSVExEX05PVyB8IFJUTERfTE9DQUwpOwpAQCAtOTA0LDEyICs5MDAsMTEgQEAg dXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkJ aWYgKG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCgpKQogCQkJZnByaW50ZihzdGRlcnIs ICJmYWlsZWQgZGxvcGVuIGZvciBsaWJwcS1vYXV0aDogJXNcbiIsIGRsZXJyb3IoKSk7CiAKLQkJ cmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoKGluaXQgPSBkbHN5bShzdGF0 ZS0+YnVpbHRpbl9mbG93LCAibGlicHFfb2F1dGhfaW5pdCIpKSA9PSBOVUxMCi0JCXx8IChmbG93 ID0gZGxzeW0oc3RhdGUtPmJ1aWx0aW5fZmxvdywgInBnX2ZlX3J1bl9vYXV0aF9mbG93IikpID09 IE5VTEwKLQkJfHwgKGNsZWFudXAgPSBkbHN5bShzdGF0ZS0+YnVpbHRpbl9mbG93LCAicGdfZmVf Y2xlYW51cF9vYXV0aF9mbG93IikpID09IE5VTEwpCisJCXx8IChzdGFydF9mbG93ID0gZGxzeW0o c3RhdGUtPmJ1aWx0aW5fZmxvdywgInBnX3N0YXJ0X29hdXRoYmVhcmVyIikpID09IE5VTEwpCiAJ ewogCQkvKgogCQkgKiBUaGlzIGlzIG1vcmUgb2YgYW4gZXJyb3IgY29uZGl0aW9uIHRoYW4gdGhl IG9uZSBhYm92ZSwgYnV0IGR1ZSB0bwpAQCAtOTE5LDcgKzkxNCw3IEBAIHVzZV9idWlsdGluX2Zs b3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAJCQlmcHJpbnRmKHN0ZGVy ciwgImZhaWxlZCBkbHN5bSBmb3IgbGlicHEtb2F1dGg6ICVzXG4iLCBkbGVycm9yKCkpOwogCiAJ CWRsY2xvc2Uoc3RhdGUtPmJ1aWx0aW5fZmxvdyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJu IDA7CiAJfQogCiAJLyoKQEAgLTkzOSw1NiArOTM0LDM3IEBAIHVzZV9idWlsdGluX2Zsb3coUEdj b25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAJCUFzc2VydChmYWxzZSk7CiAKIAkJ bGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImZhaWxlZCB0byBsb2NrIG11dGV4ICglZCki LCBsb2NrZXJyKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWlu aXRpYWxpemVkKQogCXsKIAkJaW5pdChwZ19nX3RocmVhZGxvY2ssCiAjaWZkZWYgRU5BQkxFX05M UwotCQkJIGxpYnBxX2dldHRleHQsCisJCQkgbGlicHFfZ2V0dGV4dAogI2Vsc2UKLQkJCSBOVUxM LAorCQkJIE5VTEwKICNlbmRpZgotCQkJIGNvbm5fZXJyb3JNZXNzYWdlLAotCQkJIGNvbm5fb2F1 dGhfY2xpZW50X2lkLAotCQkJIGNvbm5fb2F1dGhfY2xpZW50X3NlY3JldCwKLQkJCSBjb25uX29h dXRoX2Rpc2NvdmVyeV91cmksCi0JCQkgY29ubl9vYXV0aF9pc3N1ZXJfaWQsCi0JCQkgY29ubl9v YXV0aF9zY29wZSwKLQkJCSBjb25uX3Nhc2xfc3RhdGUsCi0JCQkgc2V0X2Nvbm5fYWx0c29jaywK LQkJCSBzZXRfY29ubl9vYXV0aF90b2tlbik7CisJCQkpOwogCiAJCWluaXRpYWxpemVkID0gdHJ1 ZTsKIAl9CiAKIAlwdGhyZWFkX211dGV4X3VubG9jaygmaW5pdF9tdXRleCk7CiAKLQkvKiBTZXQg b3VyIGFzeW5jaHJvbm91cyBjYWxsYmFja3MuICovCi0JY29ubi0+YXN5bmNfYXV0aCA9IGZsb3c7 Ci0JY29ubi0+Y2xlYW51cF9hc3luY19hdXRoID0gY2xlYW51cDsKLQotCXJldHVybiB0cnVlOwor CXJldHVybiAoc3RhcnRfZmxvdyhjb25uLCByZXF1ZXN0KSA9PSAwKSA/IDEgOiAtMTsKIH0KIAog I2Vsc2UKIAogLyoKLSAqIFVzZSB0aGUgYnVpbHRpbiBmbG93IGluIGxpYnBxLW9hdXRoLmEgKHNl ZSBsaWJwcS1vYXV0aC9vYXV0aC1jdXJsLmgpLgorICogRm9yIHN0YXRpYyBidWlsZHMsIHdlIGNh biBqdXN0IGNhbGwgcGdfc3RhcnRfb2F1dGhiZWFyZXIoKSBkaXJlY3RseS4gSXQncworICogcHJv dmlkZWQgYnkgbGlicHEtb2F1dGguYS4KICAqLwotCi1leHRlcm4gUG9zdGdyZXNQb2xsaW5nU3Rh dHVzVHlwZSBwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pOwotZXh0ZXJuIHZvaWQg cGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubik7Ci0KLWJvb2wKLXVzZV9idWls dGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgaW50 Cit1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlLCBQ R29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KQogewotCS8qIFNldCBvdXIgYXN5bmNocm9u b3VzIGNhbGxiYWNrcy4gKi8KLQljb25uLT5hc3luY19hdXRoID0gcGdfZmVfcnVuX29hdXRoX2Zs b3c7Ci0JY29ubi0+Y2xlYW51cF9hc3luY19hdXRoID0gcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93 OwotCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIChwZ19zdGFydF9vYXV0aGJlYXJlcihjb25uLCBy ZXF1ZXN0KSA9PSAwKSA/IDEgOiAtMTsKIH0KIAogI2VuZGlmCQkJCQkJCS8qIFVTRV9MSUJDVVJM ICovCkBAIC0xMDAxLDExICs5NzcsMTEgQEAgdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4s IGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKICAqIElmIHRoZSBhcHBsaWNhdGlvbiBoYXMgcmVnaXN0 ZXJlZCBhIGN1c3RvbSBmbG93IGhhbmRsZXIgdXNpbmcKICAqIFBRQVVUSERBVEFfT0FVVEhfQkVB UkVSX1RPS0VOW19WMl0sIGl0IG1heSBlaXRoZXIgcmV0dXJuIGEgdG9rZW4gaW1tZWRpYXRlbHkK ICAqIChlLmcuIGlmIGl0IGhhcyBvbmUgY2FjaGVkIGZvciBpbW1lZGlhdGUgdXNlKSwgb3Igc2V0 IHVwIGZvciBhIHNlcmllcyBvZgotICogYXN5bmNocm9ub3VzIGNhbGxiYWNrcyB3aGljaCB3aWxs IGJlIG1hbmFnZWQgYnkgcnVuX3VzZXJfb2F1dGhfZmxvdygpLgorICogYXN5bmNocm9ub3VzIGNh bGxiYWNrcyB3aGljaCB3aWxsIGJlIG1hbmFnZWQgYnkgcnVuX29hdXRoX2Zsb3coKS4KICAqCiAg KiBJZiB0aGUgZGVmYXVsdCBoYW5kbGVyIGlzIHVzZWQgaW5zdGVhZCwgYSBEZXZpY2UgQXV0aG9y aXphdGlvbiBmbG93IGlzIHVzZWQKLSAqIGZvciB0aGUgY29ubmVjdGlvbiBpZiBzdXBwb3J0IGhh cyBiZWVuIGNvbXBpbGVkIGluLiAoU2VlCi0gKiBmZS1hdXRoLW9hdXRoLWN1cmwuYyBmb3IgaW1w bGVtZW50YXRpb24gZGV0YWlscy4pCisgKiBmb3IgdGhlIGNvbm5lY3Rpb24gaWYgc3VwcG9ydCBo YXMgYmVlbiBjb21waWxlZCBpbi4gKFNlZSBvYXV0aC1jdXJsLmMgZm9yCisgKiBpbXBsZW1lbnRh dGlvbiBkZXRhaWxzLikKICAqCiAgKiBJZiBuZWl0aGVyIGEgY3VzdG9tIGhhbmRsZXIgbm9yIHRo ZSBidWlsdGluIGZsb3cgaXMgYXZhaWxhYmxlLCB0aGUgY29ubmVjdGlvbgogICogZmFpbHMgaGVy ZS4KQEAgLTEwMzQsMTEgKzEwMTAsMTcgQEAgc2V0dXBfdG9rZW5fcmVxdWVzdChQR2Nvbm4gKmNv bm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAogCS8qCiAJICogVGhlIGNsaWVudCBtYXkgaGF2 ZSBvdmVycmlkZGVuIHRoZSBPQXV0aCBmbG93LiBUcnkgdGhlIHYyIGhvb2sgZmlyc3QsCi0JICog dGhlbiBmYWxsIGJhY2sgdG8gdGhlIHYxIGltcGxlbWVudGF0aW9uLgorCSAqIHRoZW4gZmFsbCBi YWNrIHRvIHRoZSB2MSBpbXBsZW1lbnRhdGlvbi4gSWYgbmVpdGhlciBpcyBhdmFpbGFibGUsIHRy eQorCSAqIHRoZSBidWlsdGluIGZsb3cuCiAJICovCiAJcmVzID0gUFFhdXRoRGF0YUhvb2soUFFB VVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIsIGNvbm4sICZyZXF1ZXN0KTsKIAlpZiAocmVz ID09IDApCiAJCXJlcyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RP S0VOLCBjb25uLCAmcmVxdWVzdCk7CisJaWYgKHJlcyA9PSAwKQorCXsKKwkJc3RhdGUtPmJ1aWx0 aW4gPSB0cnVlOworCQlyZXMgPSB1c2VfYnVpbHRpbl9mbG93KGNvbm4sIHN0YXRlLCAmcmVxdWVz dCk7CisJfQogCiAJaWYgKHJlcyA+IDApCiAJewpAQCAtMTA3NCwxNiArMTA1NiwxNiBAQCBzZXR1 cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCiAJ CSpyZXF1ZXN0X2NvcHkgPSByZXF1ZXN0OwogCi0JCWNvbm4tPmFzeW5jX2F1dGggPSBydW5fdXNl cl9vYXV0aF9mbG93OwotCQljb25uLT5jbGVhbnVwX2FzeW5jX2F1dGggPSBjbGVhbnVwX3VzZXJf b2F1dGhfZmxvdzsKKwkJY29ubi0+YXN5bmNfYXV0aCA9IHJ1bl9vYXV0aF9mbG93OworCQljb25u LT5jbGVhbnVwX2FzeW5jX2F1dGggPSBjbGVhbnVwX29hdXRoX2Zsb3c7CiAJCXN0YXRlLT5hc3lu Y19jdHggPSByZXF1ZXN0X2NvcHk7CiAJfQogCWVsc2UgaWYgKHJlcyA8IDApCiAJewotCQlyZXBv cnRfdXNlcl9mbG93X2Vycm9yKGNvbm4sICZyZXF1ZXN0KTsKKwkJcmVwb3J0X2Zsb3dfZXJyb3Io Y29ubiwgJnJlcXVlc3QpOwogCQlnb3RvIGZhaWw7CiAJfQotCWVsc2UgaWYgKCF1c2VfYnVpbHRp bl9mbG93KGNvbm4sIHN0YXRlKSkKKwllbHNlCiAJewogCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJv cihjb25uLCAibm8gT0F1dGggZmxvd3MgYXJlIGF2YWlsYWJsZSAodHJ5IGluc3RhbGxpbmcgdGhl IGxpYnBxLW9hdXRoIHBhY2thZ2UpIik7CiAJCWdvdG8gZmFpbDsKLS0gCjIuMzQuMQoK --000000000000341f9f06458b36fb Content-Type: application/octet-stream; name="0006-libpq-oauth-Never-link-against-libpq-s-encoding-func.patch" Content-Disposition: attachment; filename="0006-libpq-oauth-Never-link-against-libpq-s-encoding-func.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miz1sao45 RnJvbSBkZDQ5MTU0MWEwMWUyOWZlYWUwOGY4ZWUxNGEyZTI3YjAwNjY5NGE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDA5OjUzOjQ0IC0wODAwClN1YmplY3Q6 IFtQQVRDSCA2LzddIGxpYnBxLW9hdXRoOiBOZXZlciBsaW5rIGFnYWluc3QgbGlicHEncyBlbmNv ZGluZwogZnVuY3Rpb25zCgpOb3cgdGhhdCBsaWJwcS1vYXV0aCBkb2Vzbid0IGhhdmUgdG8gbWF0 Y2ggdGhlIG1ham9yIHZlcnNpb24gb2YgbGlicHEsCnNvbWUgdGhpbmdzIGluIHBnX3djaGFyLmgg YXJlIHRlY2huaWNhbGx5IHVuc2FmZSBmb3IgdXMgdG8gdXNlLiAoU2VlCmI2YzdjZmFjOCBmb3Ig YSBmdWxsZXIgZGlzY3Vzc2lvbi4pIFRoaXMgaXMgdW5saWtlbHkgdG8gYmUgYSBwcm9ibGVtIC0t CndlIG9ubHkgY2FyZSBhYm91dCBVVEYtOCBpbiB0aGUgY29udGV4dCBvZiBPQXV0aCByaWdodCBu b3cgLS0gYnV0IGlmCmFueW9uZSBkaWQgaW50cm9kdWNlIGEgd2F5IHRvIGhpdCBpdCwgaXQnZCBi ZSBleHRyZW1lbHkgZGlmZmljdWx0IHRvCmRlYnVnIG9yIHJlcHJvZHVjZSwgYW5kIGl0J2QgYmUg YSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB0bwpib290LgoKRGVmaW5lIFVTRV9Q UklWQVRFX0VOQ09ESU5HX0ZVTkNTIHNvIHRoYXQgYW55b25lIHdobyB0cmllcyB0byBhZGQgYQpk ZXBlbmRlbmN5IG9uIHRoZSBleHBvcnRlZCBBUElzIHdpbGwgc2ltcGx5IGZhaWwgdG8gbGluayB0 aGUgc2hhcmVkCm1vZHVsZS4KLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5i dWlsZCB8IDEwICsrKysrKysrKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxl ICAgIHwgMTEgKysrKysrKysrLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwg MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9t ZXNvbi5idWlsZCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkCmluZGV4 IDExMTk5MTAwYjI4Li5iNzU1OTkwNDkwZCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVz b24uYnVpbGQKQEAgLTEyLDcgKzEyLDE1IEBAIGxpYnBxX29hdXRoX3NvdXJjZXMgPSBmaWxlcygK IGxpYnBxX29hdXRoX3NvX3NvdXJjZXMgPSBmaWxlcygKICAgJ29hdXRoLXV0aWxzLmMnLAogKQot bGlicHFfb2F1dGhfc29fY19hcmdzID0gWyctRFVTRV9EWU5BTUlDX09BVVRIJ10KK2xpYnBxX29h dXRoX3NvX2NfYXJncyA9IFsKKyAgJy1EVVNFX0RZTkFNSUNfT0FVVEgnLAorCisgICMgQSBiaXQg b2YgZm9yd2FyZC1sb29raW5nIHBhcmFub2lhOiBkb24ndCBhbGxvdyBhbnlvbmUgdG8gYWNjaWRl bnRhbGx5IGRlcGVuZAorICAjIG9uIHRoZSBlbmNvZGluZyBJRHMgY29taW5nIGZyb20gbGlicHEu IFRoZXkncmUgbm90IGd1YXJhbnRlZWQgdG8gbWF0Y2ggdGhlCisgICMgSURzIGluIHVzZSBieSBv dXIgdmVyc2lvbiBvZiBwZ2NvbW1vbiwgbm93IHRoYXQgd2UgYWxsb3cgdGhlIG1ham9yIHZlcnNp b24KKyAgIyBvZiBsaWJwcSB0byBkaWZmZXIgZnJvbSB0aGUgbWFqb3IgdmVyc2lvbiBvZiBsaWJw cS1vYXV0aC4KKyAgJy1EVVNFX1BSSVZBVEVfRU5DT0RJTkdfRlVOQ1MnLAorXQogCiBleHBvcnRf ZmlsZSA9IGN1c3RvbV90YXJnZXQoJ2xpYnBxLW9hdXRoLmV4cG9ydHMnLAogICBrd2FyZ3M6IGdl bl9leHBvcnRfa3dhcmdzLApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv TWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZQppbmRleCAwZmVi YjM5M2ZlYi4uNDU3MmZlNzgwZDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCkBA IC0yNCw2ICsyNCwxNCBAQCBvdmVycmlkZSBzaGxpYiA6PSBsaWIkKE5BTUUpJChETFNVRkZJWCkK IG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIp L3NyYy9wb3J0ICQoQ1BQRkxBR1MpICQoTElCQ1VSTF9DUFBGTEFHUykKIG92ZXJyaWRlIENGTEFH UyArPSAkKFBUSFJFQURfQ0ZMQUdTKQogCitvdmVycmlkZSBDUFBGTEFHU19TSExJQiA6PSAtRFVT RV9EWU5BTUlDX09BVVRICisKKyMgQSBiaXQgb2YgZm9yd2FyZC1sb29raW5nIHBhcmFub2lhOiBk b24ndCBhbGxvdyBsaWJwcS1vYXV0aC5zbyB0byBhY2NpZGVudGFsbHkKKyMgZGVwZW5kIG9uIHRo ZSBlbmNvZGluZyBJRHMgY29taW5nIGZyb20gbGlicHEuIFRoZXkncmUgbm90IGd1YXJhbnRlZWQg dG8gbWF0Y2gKKyMgdGhlIElEcyBpbiB1c2UgYnkgb3VyIHZlcnNpb24gb2YgcGdjb21tb24sIG5v dyB0aGF0IHdlIGFsbG93IHRoZSBtYWpvciB2ZXJzaW9uCisjIG9mIGxpYnBxIHRvIGRpZmZlciBm cm9tIHRoZSBtYWpvciB2ZXJzaW9uIG9mIGxpYnBxLW9hdXRoLgorb3ZlcnJpZGUgQ1BQRkxBR1Nf U0hMSUIgKz0gLURVU0VfUFJJVkFURV9FTkNPRElOR19GVU5DUworCiBPQkpTID0gXAogCSQoV0lO MzJSRVMpCiAKQEAgLTM0LDggKzQyLDcgQEAgT0JKU19TSExJQiA9IFwKIAlvYXV0aC1jdXJsX3No bGliLm8gXAogCW9hdXRoLXV0aWxzLm8gXAogCi1vYXV0aC11dGlscy5vOiBvdmVycmlkZSBDUFBG TEFHUyArPSAtRFVTRV9EWU5BTUlDX09BVVRICi1vYXV0aC1jdXJsX3NobGliLm86IG92ZXJyaWRl IENQUEZMQUdTX1NITElCICs9IC1EVVNFX0RZTkFNSUNfT0FVVEgKK29hdXRoLXV0aWxzLm86IG92 ZXJyaWRlIENQUEZMQUdTICs9ICQoQ1BQRkxBR1NfU0hMSUIpCiAKICMgQWRkIHNobGliLS9zdGxp Yi1zcGVjaWZpYyBvYmplY3RzLgogJChzaGxpYik6IG92ZXJyaWRlIE9CSlMgKz0gJChPQkpTX1NI TElCKQotLSAKMi4zNC4xCgo= --000000000000341f9f06458b36fb Content-Type: application/octet-stream; name="0007-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Disposition: attachment; filename="0007-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miz1sc886 RnJvbSBlZGEwYzZmOTA1OWZlMTAwN2I2ZTIyN2UxOGI4NGZmMTk1MmM0ZGZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDE1OjQ3OjIzIC0wODAwClN1YmplY3Q6 IFtQQVRDSCA3LzddIFdJUDogSW50cm9kdWNlIHRoaXJkLXBhcnR5IE9BdXRoIGZsb3cgcGx1Z2lu cz8KClRoaXMgZXhwZXJpbWVudGFsIGNvbW1pdCBwcm9tb3RlcyB0aGUgcGdfc3RhcnRfb2F1dGhi ZWFyZXIgQVBJIHRvIGEKcHVibGljIGhlYWRlciAobGlicHEtb2F1dGguaCkgYW5kIGFkZHMgYSBQ R09BVVRITU9EVUxFIGVudmlyb25tZW50CnZhcmlhYmxlIHRoYXQgb3ZlcnJpZGVzIHRoZSBsb2Fk IHBhdGggZm9yIHRoZSBwbHVnaW4sIGFsbG93aW5nIHVzZXJzIHRvCnByb3ZpZGUgdGhlaXIgb3du LiBUaGUgbGlicHFfb2F1dGhfaW5pdCBmdW5jdGlvbiBpcyBub3cgb3B0aW9uYWwsIGFuZAp3aWxs IHJlbWFpbiB1bmRvY3VtZW50ZWQuIChNb2R1bGVzIHRoYXQgZG9uJ3QgcHJvdmlkZSBpdCBhcmUg bWFya2VkIGFzCnVzZXItZGVmaW5lZC4pCgpUaGlzIGlzIGEgcmVsYXRpdmVseSBzbWFsbCBhbW91 bnQgb2YgaW1wbGVtZW50YXRpb24gY2hhbmdlLCBidXQKdW5mb3J0dW5hdGVseSB0aGUgdGVzdHMg aGF2ZSBhIGxhcmdlIGFtb3VudCBvZiBjb2RlIG1vdGlvbiB0byBiZSBhYmxlIHRvCnNoYXJlIGxv Z2ljIGJldHdlZW4gdGhlIHRlc3QgZXhlY3V0YWJsZSBhbmQgcGx1Z2luLiBJIG1pZ2h0IG5lZWQg dG8Kc3BsaXQgdGhhdCBpbnRvIG11bHRpcGxlIHNxdWFzaCEgY29tbWl0cyB0byBtYWtlIGl0IG1v cmUgZWFzaWx5CnJldmlld2FibGUuCgpUT0RPOiBmaWd1cmUgb3V0IFBHRExMRVhQT1JULCB3aGlj aCB3ZSBkbyBub3QgY3VycmVudGx5IHByb3ZpZGUgcHVibGljbHkKVE9ETzogYWRkIGEgcHVibGlj IGluaXQoKSBBUEkgc28gdGhhdCBubyBvbmUgdHJpZXMgdG8gaW1wbGVtZW50CiAgICAgIGxpYnBx X29hdXRoX2luaXQoKT8KVE9ETzogbG9jayBkb3duIFBHT0FVVEhNT0RVTEUgYXMgbmVjZXNzYXJ5 IHRvIGF2b2lkIGludHJvZHVjaW5nIGV4Y2l0aW5nCiAgICAgIG5ldyB2dWxuZXJhYmlsaXRpZXMK VE9ETzogaG93IGhhcmQgd291bGQgaXQgYmUgdG8gc3VwcG9ydCBXaW5kb3dzIGhlcmU/Ci0tLQog c3JjL2ludGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQgICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmggICAgICAgfCAgMjQgLS0KIHNyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaCAgICAgICAgICB8ICAgMiArLQogc3JjL2lu dGVyZmFjZXMvbGlicHEvbGlicHEtb2F1dGguaCAgICAgICAgICAgIHwgIDUyICsrKwogc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jICAgICAgIHwgICAyICstCiBzcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMgICAgICAgICAgfCAgODEgKystLQogc3JjL3Rl c3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvbWVzb24uYnVpbGQgIHwgIDE1ICsKIHNyYy90ZXN0 L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL01ha2VmaWxlICAgICB8ICAxMCArLQogLi4uL29hdXRo X3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5oICAgICAgIHwgIDI2ICsrCiBzcmMvdGVzdC9t b2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9mbG93LmMgfCAgNjkgKysrKwogLi4uL29hdXRo X3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jICAgICAgIHwgMzE5ICstLS0tLS0tLS0tLS0t LQogLi4uL29hdXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5jICAgICAgIHwgMzc0ICsr KysrKysrKysrKysrKysrKwogLi4uL21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVu dC5wbCAgIHwgIDQxICstCiAxNCBmaWxlcyBjaGFuZ2VkLCA2NDkgaW5zZXJ0aW9ucygrKSwgMzY5 IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL29hdXRoLWN1cmwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBx L2xpYnBxLW9hdXRoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL29hdXRo X3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfZmxvdy5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uYwoK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEvbWVzb24uYnVpbGQKaW5kZXggYTc0ZTg4NWIxNjkuLjdlMWJkNjUxY2RlIDEw MDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZAorKysgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZApAQCAtMTEwLDYgKzExMCw3IEBAIHBrZ2NvbmZpZy5n ZW5lcmF0ZSgKIGluc3RhbGxfaGVhZGVycygKICAgJ2xpYnBxLWZlLmgnLAogICAnbGlicHEtZXZl bnRzLmgnLAorICAnbGlicHEtb2F1dGguaCcsCiApCiAKIGluc3RhbGxfaGVhZGVycygKZGlmZiAt LWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlIGIvc3JjL2ludGVyZmFjZXMvbGli cHEvTWFrZWZpbGUKaW5kZXggZGE2NjUwMDY2ZDQuLmNjZmU2MGEwMzllIDEwMDY0NAotLS0gYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZQorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9N YWtlZmlsZQpAQCAtMTY2LDYgKzE2Niw3IEBAICQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydC9wZ19j b25maWdfcGF0aHMuaDoKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycyBpbnN0YWxsLWxpYgogCSQo SU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbGlicHEtZmUuaCAnJChERVNURElSKSQoaW5jbHVkZWRp ciknCiAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1ldmVudHMuaCAnJChERVNURElS KSQoaW5jbHVkZWRpciknCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1vYXV0aC5o ICckKERFU1RESVIpJChpbmNsdWRlZGlyKScKIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2xp YnBxLWludC5oICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKIAkkKElOU1RBTExf REFUQSkgJChzcmNkaXIpL2ZlLWF1dGgtc2FzbC5oICckKERFU1RESVIpJChpbmNsdWRlZGlyX2lu dGVybmFsKScKIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BxZXhwYnVmZmVyLmggJyQoREVT VERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpJwpAQCAtMTg4LDYgKzE4OSw3IEBAIGluc3RhbGxk aXJzOiBpbnN0YWxsZGlycy1saWIKIHVuaW5zdGFsbDogdW5pbnN0YWxsLWxpYgogCXJtIC1mICck KERFU1RESVIpJChpbmNsdWRlZGlyKS9saWJwcS1mZS5oJwogCXJtIC1mICckKERFU1RESVIpJChp bmNsdWRlZGlyKS9saWJwcS1ldmVudHMuaCcKKwlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRp cikvbGlicHEtb2F1dGguaCcKIAlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5h bCkvbGlicHEtaW50LmgnCiAJcm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwp L2ZlLWF1dGgtc2FzbC5oJwogCXJtIC1mICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFs KS9wcWV4cGJ1ZmZlci5oJwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv b2F1dGgtY3VybC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzcwNDY4OTU4Ni4uMDAwMDAwMDAwMDAKLS0t IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCisrKyAvZGV2L251bGwK QEAgLTEsMjQgKzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogb2F1dGgtY3VybC5o Ci0gKgotICoJICBEZWZpbml0aW9ucyBmb3IgT0F1dGggRGV2aWNlIEF1dGhvcml6YXRpb24gbW9k dWxlCi0gKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQotICoKLSAqIHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuaAotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot ICovCi0KLSNpZm5kZWYgT0FVVEhfQ1VSTF9ICi0jZGVmaW5lIE9BVVRIX0NVUkxfSAotCi0jaW5j bHVkZSAibGlicHEtZmUuaCIKLQotLyogRXhwb3J0ZWQgZmxvdyBjYWxsYmFjay4gKi8KLWV4dGVy biBQR0RMTEVYUE9SVCBpbnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLAotCQkJ CQkJCQkJCQlQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKLQotI2VuZGlmCQkJCQkJ CS8qIE9BVVRIX0NVUkxfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt YXV0aC1vYXV0aC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5oCmluZGV4 IGI5YWVkODc5ZTY0Li4zMGQzZmY2NzQxZSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtYXV0aC1vYXV0aC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1 dGguaApAQCAtMzUsNyArMzUsNyBAQCB0eXBlZGVmIHN0cnVjdAogCXZvaWQJICAgKmFzeW5jX2N0 eDsKIAogCWJvb2wJCWJ1aWx0aW47Ci0Jdm9pZAkgICAqYnVpbHRpbl9mbG93OworCXZvaWQJICAg KmZsb3dfbW9kdWxlOwogfSBmZV9vYXV0aF9zdGF0ZTsKIAogZXh0ZXJuIHZvaWQgcHFDbGVhck9B dXRoVG9rZW4oUEdjb25uICpjb25uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2xpYnBxLW9hdXRoLmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1vYXV0aC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYTYyYjMzMGIxYwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9hdXRoLmgKQEAgLTAsMCArMSw1 MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbGlicHEtb2F1dGguaAorICoJICBUaGlz IGZpbGUgY29udGFpbnMgc3RydWN0cyBhbmQgZnVuY3Rpb25zIHVzZWQgYnkgY3VzdG9tIE9BdXRo IHBsdWdpbnMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9hdXRo LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIExJQlBRX09BVVRIX0gK KyNkZWZpbmUgTElCUFFfT0FVVEhfSAorCisjaW5jbHVkZSAibGlicHEtZmUuaCIKKworI2lmZGVm IF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworLyogWFhYIGNhbid0IHJlbHkg b24gYy5oLCBidXQgZHVwbGljYXRpbmcgdGhpcyBpcyBhc2tpbmcgZm9yIHRyb3VibGUgKi8KKyNp Zm5kZWYgUEdETExFWFBPUlQKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgUEdETExFWFBPUlQgX19k ZWNsc3BlYyAoZGxsZXhwb3J0KQorI2VsaWYgZGVmaW5lZChfX2hhc19hdHRyaWJ1dGUpCisjaWYg X19oYXNfYXR0cmlidXRlKHZpc2liaWxpdHkpCisjZGVmaW5lIFBHRExMRVhQT1JUIF9fYXR0cmli dXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisjZWxzZQorI2RlZmluZSBQR0RMTEVYUE9S VAorI2VuZGlmCisjZWxzZQorI2RlZmluZSBQR0RMTEVYUE9SVAorI2VuZGlmCisjZW5kaWYKKwor LyoKKyAqIFYxIEFQSQorICoKKyAqIEZsb3cgcGx1Z2lucyBtdXN0IHByb3ZpZGUgYW4gaW1wbGVt ZW50YXRpb24gb2YgdGhpcyBjYWxsYmFjay4KKyAqCisgKiBUT0RPOiBwcm92aWRlIGEgbWFnaWMg c3RydWN0IHRoYXQgYWxsb3dzIGJhY2t3YXJkcyBidXQgbm90IGZvcndhcmRzIGNvbXBhdD8KKyAq LworZXh0ZXJuIFBHRExMRVhQT1JUIGludCBwZ19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNv bm4sCisJCQkJCQkJCQkJCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpOworCisjaWZk ZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYJCQkJCQkJLyogTElCUFFfT0FVVEhf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5j IGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jCmluZGV4IDgxMmRmMTQ3 ZDIwLi5mZmUyZTc5MzIyNSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv b2F1dGgtY3VybC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwu YwpAQCAtMjksOCArMjksOCBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vanNvbmFwaS5o IgorI2luY2x1ZGUgImxpYnBxLW9hdXRoLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKLSNp bmNsdWRlICJvYXV0aC1jdXJsLmgiCiAKICNpZmRlZiBVU0VfRFlOQU1JQ19PQVVUSAogCmRpZmYg LS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKaW5kZXggYWM2OGI0YmQzZWYuLjI4OTRjZDk5NWI2 IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKKysrIGIv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCkBAIC0xNyw2ICsxNyw4IEBACiAK ICNpZmRlZiBVU0VfRFlOQU1JQ19PQVVUSAogI2luY2x1ZGUgPGRsZmNuLmg+CisjZWxzZQorI2lu Y2x1ZGUgImxpYnBxLW9hdXRoLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9iYXNlNjQu aCIKQEAgLTg4MCwxNSArODgyLDMzIEBAIHVzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBm ZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlCiAJICogT24g dGhlIG90aGVyIHBsYXRmb3JtcywgbG9hZCB0aGUgbW9kdWxlIHVzaW5nIG9ubHkgdGhlIGJhc2Vu YW1lLCB0bwogCSAqIHJlbHkgb24gdGhlIHJ1bnRpbWUgbGlua2VyJ3Mgc3RhbmRhcmQgc2VhcmNo IGJlaGF2aW9yLgogCSAqLwotCWNvbnN0IGNoYXIgKmNvbnN0IG1vZHVsZV9uYW1lID0KKwljb25z dCBjaGFyICptb2R1bGVfbmFtZSA9CiAjaWYgZGVmaW5lZChfX2Rhcndpbl9fKQogCQlMSUJESVIg Ii9saWJwcS1vYXV0aCIgRExTVUZGSVg7CiAjZWxzZQogCQkibGlicHEtb2F1dGgiIERMU1VGRklY OwogI2VuZGlmCiAKLQlzdGF0ZS0+YnVpbHRpbl9mbG93ID0gZGxvcGVuKG1vZHVsZV9uYW1lLCBS VExEX05PVyB8IFJUTERfTE9DQUwpOwotCWlmICghc3RhdGUtPmJ1aWx0aW5fZmxvdykKKwkvKi0K KwkgKiBBZGRpdGlvbmFsbHksIHRoZSB1c2VyIG1heSBvdmVycmlkZSB0aGUgbW9kdWxlIHBhdGgg ZXhwbGljaXRseSB0byBiZQorCSAqIGFibGUgdG8gcHJvdmlkZSB0aGVpciBvd24gbW9kdWxlLCB2 aWEgUEdPQVVUSE1PRFVMRS4KKwkgKgorCSAqIFRPRE86IGVycm9yIG1lc3NhZ2VzIGJlbG93IG5l ZWQgdG8gYmUgcmV0aG91Z2h0IHdoZW4gdGhpcyBpcyBzZXQKKwkgKiBUT0RPOiBoYXZlIHRvIHRo aW5rIGFib3V0IF9hbGxfIHRoZSBzZWN1cml0eSByYW1pZmljYXRpb25zIG9mIHRoaXMuIFdoYXQK KwkgKiBleGlzdGluZyBwcm90ZWN0aW9ucyBpbiBMRF9MSUJSQVJZX1BBVEggKGFuZC9vciBTSVAp IGFyZSB3ZSBwb3RlbnRpYWxseQorCSAqIGJ5cGFzc2luZz8gU2hvdWxkIHdlIGNoZWNrIHRoZSBw ZXJtaXNzaW9ucyBvZiB0aGUgZmlsZSBzb21laG93Li4uPworCSAqIFRPRE86IG1heWJlIGRpc2Fs bG93IGFueXRoaW5nIG5vdCB1bmRlcm5lYXRoIExJQkRJUj8gb3IgUEtHTElCRElSPworCSAqIFNo b3VsZCBpdCBoYXZlIGEgbmFtaW5nIGNvbnZlbnRpb24/CisJICovCisJeworCQljb25zdCBjaGFy ICplbnYgPSBnZXRlbnYoIlBHT0FVVEhNT0RVTEUiKTsKKworCQlpZiAoZW52ICYmIGVudlswXSkK KwkJCW1vZHVsZV9uYW1lID0gZW52OworCX0KKworCXN0YXRlLT5mbG93X21vZHVsZSA9IGRsb3Bl bihtb2R1bGVfbmFtZSwgUlRMRF9OT1cgfCBSVExEX0xPQ0FMKTsKKwlpZiAoIXN0YXRlLT5mbG93 X21vZHVsZSkKIAl7CiAJCS8qCiAJCSAqIEZvciBlbmQgdXNlcnMsIHRoaXMgcHJvYmFibHkgaXNu J3QgYW4gZXJyb3IgY29uZGl0aW9uLCBpdCBqdXN0CkBAIC05MDMsOCArOTIzLDcgQEAgdXNlX2J1 aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0aEJl YXJlclJlcXVlc3RWMiAqcmUKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKChpbml0ID0gZGxzeW0o c3RhdGUtPmJ1aWx0aW5fZmxvdywgImxpYnBxX29hdXRoX2luaXQiKSkgPT0gTlVMTAotCQl8fCAo c3RhcnRfZmxvdyA9IGRsc3ltKHN0YXRlLT5idWlsdGluX2Zsb3csICJwZ19zdGFydF9vYXV0aGJl YXJlciIpKSA9PSBOVUxMKQorCWlmICgoc3RhcnRfZmxvdyA9IGRsc3ltKHN0YXRlLT5mbG93X21v ZHVsZSwgInBnX3N0YXJ0X29hdXRoYmVhcmVyIikpID09IE5VTEwpCiAJewogCQkvKgogCQkgKiBU aGlzIGlzIG1vcmUgb2YgYW4gZXJyb3IgY29uZGl0aW9uIHRoYW4gdGhlIG9uZSBhYm92ZSwgYnV0 IGR1ZSB0bwpAQCAtOTEzLDcgKzkzMiw3IEBAIHVzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25u LCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlCiAJCWlm IChvYXV0aF91bnNhZmVfZGVidWdnaW5nX2VuYWJsZWQoKSkKIAkJCWZwcmludGYoc3RkZXJyLCAi ZmFpbGVkIGRsc3ltIGZvciBsaWJwcS1vYXV0aDogJXNcbiIsIGRsZXJyb3IoKSk7CiAKLQkJZGxj bG9zZShzdGF0ZS0+YnVpbHRpbl9mbG93KTsKKwkJZGxjbG9zZShzdGF0ZS0+Zmxvd19tb2R1bGUp OwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTkyMywzNCArOTQyLDQ2IEBAIHVzZV9idWlsdGluX2Zs b3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1 ZXN0VjIgKnJlCiAJICovCiAKIAkvKgotCSAqIFdlIG5lZWQgdG8gaW5qZWN0IG5lY2Vzc2FyeSBm dW5jdGlvbiBwb2ludGVycyBpbnRvIHRoZSBtb2R1bGUuIFRoaXMKLQkgKiBvbmx5IG5lZWRzIHRv IGJlIGRvbmUgb25jZSAtLSBldmVuIGlmIHRoZSBwb2ludGVycyBhcmUgY29uc3RhbnQsCi0JICog YXNzaWduaW5nIHRoZW0gd2hpbGUgYW5vdGhlciB0aHJlYWQgaXMgZXhlY3V0aW5nIHRoZSBmbG93 cyBmZWVscyBsaWtlCi0JICogdGVtcHRpbmcgZmF0ZS4KKwkgKiBPdXIgbGlicHEtb2F1dGguc28g cHJvdmlkZXMgYSBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBsaWJwcQorCSAq IGludGVncmF0aW9uLiBJdCdzIG5vdCBhIHByb2JsZW0gaWYgd2UgZG9uJ3QgZmluZCB0aGlzOyBp dCBqdXN0IG1lYW5zCisJICogdGhhdCBhIHVzZXItZGVmaW5lZCBQR09BVVRITU9EVUxFIGlzIGJl aW5nIHVzZWQuCiAJICovCi0JaWYgKChsb2NrZXJyID0gcHRocmVhZF9tdXRleF9sb2NrKCZpbml0 X211dGV4KSkgIT0gMCkKKwlpbml0ID0gZGxzeW0oc3RhdGUtPmZsb3dfbW9kdWxlLCAibGlicHFf b2F1dGhfaW5pdCIpOworCisJaWYgKCFpbml0KQorCQlzdGF0ZS0+YnVpbHRpbiA9IGZhbHNlOyAv KiBhZGp1c3Qgb3VyIGVycm9yIG1lc3NhZ2VzICovCisJZWxzZQogCXsKLQkJLyogU2hvdWxkIG5v dCBoYXBwZW4uLi4gYnV0IGRvbid0IGNvbnRpbnVlIGlmIGl0IGRvZXMuICovCi0JCUFzc2VydChm YWxzZSk7CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gaW5qZWN0IG5lY2Vzc2FyeSBmdW5jdGlvbiBw b2ludGVycyBpbnRvIHRoZSBtb2R1bGUuIFRoaXMKKwkJICogb25seSBuZWVkcyB0byBiZSBkb25l IG9uY2UgLS0gZXZlbiBpZiB0aGUgcG9pbnRlcnMgYXJlIGNvbnN0YW50LAorCQkgKiBhc3NpZ25p bmcgdGhlbSB3aGlsZSBhbm90aGVyIHRocmVhZCBpcyBleGVjdXRpbmcgdGhlIGZsb3dzIGZlZWxz CisJCSAqIGxpa2UgdGVtcHRpbmcgZmF0ZS4KKwkJICovCisJCWlmICgobG9ja2VyciA9IHB0aHJl YWRfbXV0ZXhfbG9jaygmaW5pdF9tdXRleCkpICE9IDApCisJCXsKKwkJCS8qIFNob3VsZCBub3Qg aGFwcGVuLi4uIGJ1dCBkb24ndCBjb250aW51ZSBpZiBpdCBkb2VzLiAqLworCQkJQXNzZXJ0KGZh bHNlKTsKIAotCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLCAiZmFpbGVkIHRvIGxvY2sg bXV0ZXggKCVkKSIsIGxvY2tlcnIpOwotCQlyZXR1cm4gMDsKLQl9CisJCQlsaWJwcV9hcHBlbmRf Y29ubl9lcnJvcihjb25uLCAiZmFpbGVkIHRvIGxvY2sgbXV0ZXggKCVkKSIsIGxvY2tlcnIpOwor CQkJcmV0dXJuIDA7CisJCX0KIAotCWlmICghaW5pdGlhbGl6ZWQpCi0JewotCQlpbml0KHBnX2df dGhyZWFkbG9jaywKKwkJaWYgKCFpbml0aWFsaXplZCkKKwkJeworCQkJaW5pdChwZ19nX3RocmVh ZGxvY2ssCiAjaWZkZWYgRU5BQkxFX05MUwotCQkJIGxpYnBxX2dldHRleHQKKwkJCQkgbGlicHFf Z2V0dGV4dAogI2Vsc2UKLQkJCSBOVUxMCisJCQkJIE5VTEwKICNlbmRpZgotCQkJKTsKKwkJCQkp OwogCi0JCWluaXRpYWxpemVkID0gdHJ1ZTsKLQl9CisJCQlpbml0aWFsaXplZCA9IHRydWU7CisJ CX0KIAotCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbml0X211dGV4KTsKKwkJcHRocmVhZF9tdXRl eF91bmxvY2soJmluaXRfbXV0ZXgpOworCX0KIAogCXJldHVybiAoc3RhcnRfZmxvdyhjb25uLCBy ZXF1ZXN0KSA9PSAwKSA/IDEgOiAtMTsKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv b2F1dGhfdmFsaWRhdG9yL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxp ZGF0b3IvbWVzb24uYnVpbGQKaW5kZXggYTZmOTM3ZmQ3ZDcuLjFkODk4MjcwMjIwIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWlsZAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWlsZApAQCAtNTAsNiArNTAs NyBAQCB0ZXN0X2luc3RhbGxfbGlicyArPSBtYWdpY192YWxpZGF0b3IKIAogb2F1dGhfaG9va19j bGllbnRfc291cmNlcyA9IGZpbGVzKAogICAnb2F1dGhfaG9va19jbGllbnQuYycsCisgICdvYXV0 aF90ZXN0X2NvbW1vbi5jJywKICkKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCkBAIC02 Nyw2ICs2OCwxOSBAQCBvYXV0aF9ob29rX2NsaWVudCA9IGV4ZWN1dGFibGUoJ29hdXRoX2hvb2tf Y2xpZW50JywKICkKIHRlc3RwcmVwX3RhcmdldHMgKz0gb2F1dGhfaG9va19jbGllbnQKIAorb2F1 dGhfZmxvdyA9IHNoYXJlZF9tb2R1bGUoJ29hdXRoX2Zsb3cnLAorICBmaWxlcygKKyAgICAnb2F1 dGhfZmxvdy5jJywKKyAgICAnb2F1dGhfdGVzdF9jb21tb24uYycsCisgICksCisgIGluY2x1ZGVf ZGlyZWN0b3JpZXM6IFtwb3N0Z3Jlc19pbmNdLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9z aGxpYl9jb2RlLCBsaWJwcV0sCisgIGt3YXJnczogZGVmYXVsdF9saWJfYXJncyArIHsKKyAgICAn aW5zdGFsbCc6IGZhbHNlLAorICB9LAorKQordGVzdHByZXBfdGFyZ2V0cyArPSBvYXV0aF9mbG93 CisKIHRlc3RzICs9IHsKICAgJ25hbWUnOiAnb2F1dGhfdmFsaWRhdG9yJywKICAgJ3NkJzogbWVz b24uY3VycmVudF9zb3VyY2VfZGlyKCksCkBAIC04MCw2ICs5NCw3IEBAIHRlc3RzICs9IHsKICAg ICAgICdQWVRIT04nOiBweXRob24uZnVsbF9wYXRoKCksCiAgICAgICAnd2l0aF9saWJjdXJsJzog b2F1dGhfZmxvd19zdXBwb3J0ZWQgPyAneWVzJyA6ICdubycsCiAgICAgICAnd2l0aF9weXRob24n OiAneWVzJywKKyAgICAgICdmbG93X21vZHVsZV9wYXRoJzogb2F1dGhfZmxvdy5mdWxsX3BhdGgo KSwKICAgICB9LAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92 YWxpZGF0b3IvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9NYWtl ZmlsZQppbmRleCAwNWI5ZjA2ZWQ3My4uZTIyMDk4ZGFjYjggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv b2F1dGhfdmFsaWRhdG9yL01ha2VmaWxlCkBAIC0xNCwxMSArMTQsMTMgQEAgUEdGSUxFREVTQyA9 ICJ2YWxpZGF0b3IgLSB0ZXN0IE9BdXRoIHZhbGlkYXRvciBtb2R1bGUiCiAKIFBST0dSQU0gPSBv YXV0aF9ob29rX2NsaWVudAogUEdBUFBJQ09OID0gd2luMzIKLU9CSlMgPSAkKFdJTjMyUkVTKSBv YXV0aF9ob29rX2NsaWVudC5vCitPQkpTID0gJChXSU4zMlJFUykgb2F1dGhfaG9va19jbGllbnQu byBvYXV0aF90ZXN0X2NvbW1vbi5vCiAKIFBHX0NQUEZMQUdTID0gLUkkKGxpYnBxX3NyY2RpcikK IFBHX0xJQlNfSU5URVJOQUwgKz0gJChsaWJwcV9wZ3BvcnQpCiAKK0VYVFJBX0NMRUFOID0gb2F1 dGhfZmxvdyQoRExTVUZGSVgpIG9hdXRoX2Zsb3cubworCiBOT19JTlNUQUxMQ0hFQ0sgPSAxCiAK IFRBUF9URVNUUyA9IDEKQEAgLTMzLDggKzM1LDE0IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4u Ly4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBpbmNsdWRl ICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5tawogCithbGw6IG9hdXRoX2Zs b3ckKERMU1VGRklYKQorCitvYXV0aF9mbG93JChETFNVRkZJWCk6IG9hdXRoX2Zsb3cubyBvYXV0 aF90ZXN0X2NvbW1vbi5vCisJJChDQykgJChDRkxBR1MpICReICQoTERGTEFHUykgJChsaWJwcV9w Z3BvcnRfc2hsaWIpICQoTERGTEFHU19TTCkgLXNoYXJlZCAtbyAkQAorCiBleHBvcnQgUFlUSE9O CiBleHBvcnQgd2l0aF9saWJjdXJsCiBleHBvcnQgd2l0aF9weXRob24KK2V4cG9ydCBmbG93X21v ZHVsZV9wYXRoIDo9ICQoYWJzX3RvcF9idWlsZGRpcikvJChzdWJkaXIpL29hdXRoX2Zsb3ckKERM U1VGRklYKQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxp ZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uaCBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRh dG9yL29hdXRoX3Rlc3RfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjMzZTcyZTMwNDQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9v YXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uaApAQCAtMCwwICsxLDI2IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0aF90ZXN0X2NvbW1vbi5oCisgKgkgIFNoYXJlZCBm dW5jdGlvbmFsaXR5IGZvciBvYXV0aF9ob29rX2NsaWVudCBhbmQgb2F1dGhfZmxvdworICoKKyAq IENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIE9BVVRIX1RFU1RfQ09NTU9O X0gKKyNkZWZpbmUgT0FVVEhfVEVTVF9DT01NT05fSAorCisvKgorICogT25seSBwdWJsaWMgaGVh ZGVycyBjYW4gYmUgaGVyZSwgc2luY2Ugb2F1dGhfZmxvdy5jIGlzIHRyeWluZyB0byB0ZXN0IG9u bHkKKyAqIHRoZSBwdWJsaWMgQVBJLgorICovCisjaW5jbHVkZSAibGlicHEtZmUuaCIKKworZXh0 ZXJuIGludAlzdHJlc3NfYXN5bmM7CQkvKiBmb3Igb2F1dGhfaG9va19jbGllbnQgKi8KKworZXh0 ZXJuIGNoYXIgKm9hdXRoX3Rlc3RfcGFyc2VfYXJndihpbnQgYXJnYywgY2hhciAqYXJndltdLCBp bnQgZm9yX3BsdWdpbik7CitleHRlcm4gaW50CW9hdXRoX3Rlc3RfYXV0aGRhdGFfaG9vayhQR2F1 dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50CW9hdXRo X3Rlc3Rfc3RhcnRfZmxvdyhQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJl cXVlc3QpOworCisjZW5kaWYJCQkJCQkJLyogT0FVVEhfVEVTVF9DT01NT05fSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfZmxvdy5jIGIvc3Jj L3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfZmxvdy5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MDY4YTQ1YWUyOQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2Zsb3cuYwpAQCAtMCwwICsx LDY5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0aF9mbG93LmMKKyAqCSAgVGVz dCBwbHVnaW4gZm9yIGNsaWVudHNpZGUgT0F1dGggZmxvd3MKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorCisvKiBTaW5jZSB3ZSB3YW50IHRvIHRlc3QgdGhlIHB1YmxpYyBBUEksIG9ubHkgaW5jbHVk ZSBwdWJsaWMgaGVhZGVycyBoZXJlLiAqLworI2luY2x1ZGUgImxpYnBxLWZlLmgiCisjaW5jbHVk ZSAibGlicHEtb2F1dGguaCIKKyNpbmNsdWRlICJvYXV0aF90ZXN0X2NvbW1vbi5oIgorCitzdGF0 aWMgdm9pZAorbG9hZF90ZXN0X2ZsYWdzKHZvaWQpCit7CisJaW50CQkJYXJnYzsKKwljaGFyCSAg Kiphcmd2OworCWNoYXIJICAgKmVudiA9IGdldGVudigiT0FVVEhfVEVTVF9GTEFHUyIpOworCWlu dAkJCWZsYWdfY291bnQ7CisJaW50CQkJaTsKKworCWlmICghZW52IHx8ICFlbnZbMF0pCisJewor CQlmcHJpbnRmKHN0ZGVyciwgIk9BVVRIX1RFU1RfRkxBR1MgbXVzdCBiZSBzZXRcbiIpOworCQll eGl0KDEpOworCX0KKworCWZsYWdfY291bnQgPSAxOworCWZvciAoY2hhciAqYyA9IGVudjsgKmM7 IGMrKykKKwl7CisJCWlmICgqYyA9PSAnXHgwMScpCisJCQlmbGFnX2NvdW50Kys7CisJfQorCisJ YXJnYyA9IGZsYWdfY291bnQgKyAxOworCWFyZ3YgPSBtYWxsb2Moc2l6ZW9mKCphcmd2KSAqIChh cmdjICsgMSkpOworCWlmICghYXJndikKKwl7CisJCWZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1l bW9yeSIpOworCQlleGl0KDEpOworCX0KKworCWFyZ3ZbMF0gPSAiW3BsdWdpbiB0ZXN0XSI7CisJ Zm9yIChpID0gMTsgaSA8IGZsYWdfY291bnQ7IGkrKykKKwl7CisJCWFyZ3ZbaV0gPSBlbnY7CisK KwkJZW52ID0gc3RyY2hyKGVudiwgJ1x4MDEnKTsKKwkJKmVudisrID0gJ1wwJzsKKwl9CisJYXJn dltmbGFnX2NvdW50XSA9IGVudjsKKwlhcmd2W2FyZ2NdID0gTlVMTDsKKworCW9hdXRoX3Rlc3Rf cGFyc2VfYXJndihhcmdjLCBhcmd2LCAxIC8qIHBsdWdpbiAqLyApOworfQorCitpbnQKK3BnX3N0 YXJ0X29hdXRoYmVhcmVyKFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVx dWVzdCkKK3sKKwlsb2FkX3Rlc3RfZmxhZ3MoKTsKKworCXJldHVybiBvYXV0aF90ZXN0X3N0YXJ0 X2Zsb3coY29ubiwgcmVxdWVzdCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29h dXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0 aF92YWxpZGF0b3Ivb2F1dGhfaG9va19jbGllbnQuYwppbmRleCBiMWEzYjAxNDA3OS4uZTBiMDIy YTI2OGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRo X2hvb2tfY2xpZW50LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1 dGhfaG9va19jbGllbnQuYwpAQCAtMTgsMTQ0ICsxOCwxOCBAQAogCiAjaW5jbHVkZSA8c3lzL3Nv Y2tldC5oPgogCi0jaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJsaWJwcS1mZS5o IgotI2luY2x1ZGUgInBxZXhwYnVmZmVyLmgiCiAKLXN0YXRpYyBpbnQJaGFuZGxlX2F1dGhfZGF0 YShQR2F1dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgUG9z dGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBhc3luY19jYihQR2Nvbm4gKmNvbm4sCi0JCQkJCQkJCQkJ ICBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLAotCQkJCQkJCQkJCSAgcGdzb2NrZXQgKmFsdHNv Y2spOwotc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgbWlzYmVoYXZlX2NiKFBHY29u biAqY29ubiwKLQkJCQkJCQkJCQkJICBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLAotCQkJCQkJ CQkJCQkgIHBnc29ja2V0ICphbHRzb2NrKTsKLQotc3RhdGljIHZvaWQKLXVzYWdlKGNoYXIgKmFy Z3ZbXSkKLXsKLQlwcmludGYoInVzYWdlOiAlcyBbZmxhZ3NdIENPTk5JTkZPXG5cbiIsIGFyZ3Zb MF0pOwotCi0JcHJpbnRmKCJyZWNvZ25pemVkIGZsYWdzOlxuIik7Ci0JcHJpbnRmKCIgIC1oLCAt LWhlbHAgICAgICAgICAgICAgIHNob3cgdGhpcyBtZXNzYWdlXG4iKTsKLQlwcmludGYoIiAgLXYg VkVSU0lPTiAgICAgICAgICAgICAgc2VsZWN0IHRoZSBob29rIEFQSSB2ZXJzaW9uIChkZWZhdWx0 IDIpXG4iKTsKLQlwcmludGYoIiAgLS1leHBlY3RlZC1zY29wZSBTQ09QRSAgZmFpbCBpZiByZWNl aXZlZCBzY29wZXMgZG8gbm90IG1hdGNoIFNDT1BFXG4iKTsKLQlwcmludGYoIiAgLS1leHBlY3Rl ZC11cmkgVVJJICAgICAgZmFpbCBpZiByZWNlaXZlZCBjb25maWd1cmF0aW9uIGxpbmsgZG9lcyBu b3QgbWF0Y2ggVVJJXG4iKTsKLQlwcmludGYoIiAgLS1leHBlY3RlZC1pc3N1ZXIgSVNTICAgZmFp bCBpZiByZWNlaXZlZCBpc3N1ZXIgZG9lcyBub3QgbWF0Y2ggSVNTICh2MiBvbmx5KVxuIik7Ci0J cHJpbnRmKCIgIC0tbWlzYmVoYXZlPU1PREUgICAgICAgIGhhdmUgdGhlIGhvb2sgZmFpbCByZXF1 aXJlZCBwb3N0Y29uZGl0aW9uc1xuIgotCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAo TU9ERXM6IG5vLWhvb2ssIGZhaWwtYXN5bmMsIG5vLXRva2VuLCBuby1zb2NrZXQpXG4iKTsKLQlw cmludGYoIiAgLS1uby1ob29rICAgICAgICAgICAgICAgZG9uJ3QgaW5zdGFsbCBPQXV0aCBob29r c1xuIik7Ci0JcHJpbnRmKCIgIC0taGFuZy1mb3JldmVyICAgICAgICAgIGRvbid0IGV2ZXIgcmV0 dXJuIGEgdG9rZW4gKGNvbWJpbmUgd2l0aCBjb25uZWN0X3RpbWVvdXQpXG4iKTsKLQlwcmludGYo IiAgLS10b2tlbiBUT0tFTiAgICAgICAgICAgdXNlIHRoZSBwcm92aWRlZCBUT0tFTiB2YWx1ZVxu Iik7Ci0JcHJpbnRmKCIgIC0tZXJyb3IgRVJSTVNHICAgICAgICAgIGZhaWwgaW5zdGVhZCwgd2l0 aCB0aGUgZ2l2ZW4gRVJSTVNHICh2MiBvbmx5KVxuIik7Ci0JcHJpbnRmKCIgIC0tc3RyZXNzLWFz eW5jICAgICAgICAgIGJ1c3ktbG9vcCBvbiBQUWNvbm5lY3RQb2xsIHJhdGhlciB0aGFuIHBvbGxp bmdcbiIpOwotfQotCi0vKiAtLW9wdGlvbnMgKi8KLXN0YXRpYyBib29sIG5vX2hvb2sgPSBmYWxz ZTsKLXN0YXRpYyBib29sIGhhbmdfZm9yZXZlciA9IGZhbHNlOwotc3RhdGljIGJvb2wgc3RyZXNz X2FzeW5jID0gZmFsc2U7Ci1zdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfdXJpID0gTlVMTDsK LXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9pc3N1ZXIgPSBOVUxMOwotc3RhdGljIGNvbnN0 IGNoYXIgKmV4cGVjdGVkX3Njb3BlID0gTlVMTDsKLXN0YXRpYyBjb25zdCBjaGFyICptaXNiZWhh dmVfbW9kZSA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqdG9rZW4gPSBOVUxMOwotc3RhdGljIGNoYXIg KmVycm1zZyA9IE5VTEw7Ci1zdGF0aWMgaW50CWhvb2tfdmVyc2lvbiA9IFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyOworI2luY2x1ZGUgIm9hdXRoX3Rlc3RfY29tbW9uLmgiCiAKIGlu dAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qg b3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewotCQl7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwg J2gnfSwKLQotCQl7ImV4cGVjdGVkLXNjb3BlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEw MDB9LAotCQl7ImV4cGVjdGVkLXVyaSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDAxfSwK LQkJeyJuby1ob29rIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDJ9LAotCQl7InRva2VuIiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDN9LAotCQl7ImhhbmctZm9yZXZlciIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAxMDA0fSwKLQkJeyJtaXNiZWhhdmUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgMTAwNX0sCi0JCXsic3RyZXNzLWFzeW5jIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDZ9LAot CQl7ImV4cGVjdGVkLWlzc3VlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA3fSwKLQkJ eyJlcnJvciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA4fSwKLQkJezB9Ci0JfTsKLQot CWNvbnN0IGNoYXIgKmNvbm5pbmZvOworCWNvbnN0IGNoYXIgKmNvbm5pbmZvID0gb2F1dGhfdGVz dF9wYXJzZV9hcmd2KGFyZ2MsIGFyZ3YsIDAgLyogaG9vayAqLyApOwogCVBHY29ubgkgICAqY29u bjsKLQlpbnQJCQljOwotCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImh2 OiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQotCXsKLQkJc3dpdGNoIChjKQotCQl7Ci0J CQljYXNlICdoJzoKLQkJCQl1c2FnZShhcmd2KTsKLQkJCQlyZXR1cm4gMDsKLQotCQkJY2FzZSAn dic6Ci0JCQkJaWYgKHN0cmNtcChvcHRhcmcsICIxIikgPT0gMCkKLQkJCQkJaG9va192ZXJzaW9u ID0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU47Ci0JCQkJZWxzZSBpZiAoc3RyY21wKG9w dGFyZywgIjIiKSA9PSAwKQotCQkJCQlob29rX3ZlcnNpb24gPSBQUUFVVEhEQVRBX09BVVRIX0JF QVJFUl9UT0tFTl9WMjsKLQkJCQllbHNlCi0JCQkJewotCQkJCQl1c2FnZShhcmd2KTsKLQkJCQkJ cmV0dXJuIDE7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlIDEwMDA6CQkJLyogLS1leHBl Y3RlZC1zY29wZSAqLwotCQkJCWV4cGVjdGVkX3Njb3BlID0gb3B0YXJnOwotCQkJCWJyZWFrOwot Ci0JCQljYXNlIDEwMDE6CQkJLyogLS1leHBlY3RlZC11cmkgKi8KLQkJCQlleHBlY3RlZF91cmkg PSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwMjoJCQkvKiAtLW5vLWhvb2sgKi8K LQkJCQlub19ob29rID0gdHJ1ZTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDAzOgkJCS8qIC0t dG9rZW4gKi8KLQkJCQl0b2tlbiA9IG9wdGFyZzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDA0 OgkJCS8qIC0taGFuZy1mb3JldmVyICovCi0JCQkJaGFuZ19mb3JldmVyID0gdHJ1ZTsKLQkJCQli cmVhazsKLQotCQkJY2FzZSAxMDA1OgkJCS8qIC0tbWlzYmVoYXZlICovCi0JCQkJbWlzYmVoYXZl X21vZGUgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwNjoJCQkvKiAtLXN0cmVz cy1hc3luYyAqLwotCQkJCXN0cmVzc19hc3luYyA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNh c2UgMTAwNzoJCQkvKiAtLWV4cGVjdGVkLWlzc3VlciAqLwotCQkJCWV4cGVjdGVkX2lzc3VlciA9 IG9wdGFyZzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDA4OgkJCS8qIC0tZXJyb3IgKi8KLQkJ CQllcnJtc2cgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJdXNhZ2Uo YXJndik7Ci0JCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlpZiAoYXJnYyAhPSBvcHRpbmQgKyAx KQotCXsKLQkJdXNhZ2UoYXJndik7Ci0JCXJldHVybiAxOwotCX0KLQotCWNvbm5pbmZvID0gYXJn dltvcHRpbmRdOwogCiAJLyogU2V0IHVwIG91ciBPQXV0aCBob29rcy4gKi8KLQlQUXNldEF1dGhE YXRhSG9vayhoYW5kbGVfYXV0aF9kYXRhKTsKKwlQUXNldEF1dGhEYXRhSG9vayhvYXV0aF90ZXN0 X2F1dGhkYXRhX2hvb2spOwogCiAJLyogQ29ubmVjdC4gKEFsbCB0aGUgYWN0dWFsIHdvcmsgaXMg aW4gdGhlIGhvb2suKSAqLwogCWlmIChzdHJlc3NfYXN5bmMpCkBAIC0xOTMsMTkwICs2NywzIEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlQUWZpbmlzaChjb25uKTsKIAlyZXR1cm4g MDsKIH0KLQotLyoKLSAqIFBRYXV0aERhdGFIb29rIGltcGxlbWVudGF0aW9uLiBSZXBsYWNlcyB0 aGUgZGVmYXVsdCBjbGllbnQgZmxvdyBieSBoYW5kbGluZwotICogUFFBVVRIREFUQV9PQVVUSF9C RUFSRVJfVE9LRU5bX1YyXS4KLSAqLwotc3RhdGljIGludAotaGFuZGxlX2F1dGhfZGF0YShQR2F1 dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0YSkKLXsKLQlQR29hdXRoQmVhcmVy UmVxdWVzdCAqcmVxOwotCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcTIgPSBOVUxMOwotCi0J QXNzZXJ0KGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiB8fAot CQkgICBob29rX3ZlcnNpb24gPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIpOwot Ci0JaWYgKG5vX2hvb2sgfHwgdHlwZSAhPSBob29rX3ZlcnNpb24pCi0JCXJldHVybiAwOwotCi0J cmVxID0gZGF0YTsKLQlpZiAodHlwZSA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9W MikKLQkJcmVxMiA9IGRhdGE7Ci0KLQlpZiAoaGFuZ19mb3JldmVyKQotCXsKLQkJLyogU3RhcnQg YXN5bmNocm9ub3VzIHByb2Nlc3NpbmcuICovCi0JCXJlcS0+YXN5bmMgPSBhc3luY19jYjsKLQkJ cmV0dXJuIDE7Ci0JfQotCi0JaWYgKG1pc2JlaGF2ZV9tb2RlKQotCXsKLQkJaWYgKHN0cmNtcCht aXNiZWhhdmVfbW9kZSwgIm5vLWhvb2siKSAhPSAwKQotCQkJcmVxLT5hc3luYyA9IG1pc2JlaGF2 ZV9jYjsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKGV4cGVjdGVkX3VyaSkKLQl7Ci0JCWlmICgh cmVxLT5vcGVuaWRfY29uZmlndXJhdGlvbikKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJleHBl Y3RlZCBVUkkgXCIlc1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRfdXJpKTsKLQkJCXJldHVybiAt MTsKLQkJfQotCi0JCWlmIChzdHJjbXAoZXhwZWN0ZWRfdXJpLCByZXEtPm9wZW5pZF9jb25maWd1 cmF0aW9uKSAhPSAwKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIFVSSSBcIiVz XCIsIGdvdCBcIiVzXCJcbiIsIGV4cGVjdGVkX3VyaSwgcmVxLT5vcGVuaWRfY29uZmlndXJhdGlv bik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlpZiAoZXhwZWN0ZWRfc2NvcGUpCi0Jewot CQlpZiAoIXJlcS0+c2NvcGUpCi0JCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgc2Nv cGUgXCIlc1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRfc2NvcGUpOwotCQkJcmV0dXJuIC0xOwot CQl9Ci0KLQkJaWYgKHN0cmNtcChleHBlY3RlZF9zY29wZSwgcmVxLT5zY29wZSkgIT0gMCkKLQkJ ewotCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBzY29wZSBcIiVzXCIsIGdvdCBcIiVzXCJc biIsIGV4cGVjdGVkX3Njb3BlLCByZXEtPnNjb3BlKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0K LQotCWlmIChleHBlY3RlZF9pc3N1ZXIpCi0JewotCQlpZiAoIXJlcTIpCi0JCXsKLQkJCWZwcmlu dGYoc3RkZXJyLCAiLS1leHBlY3RlZC1pc3N1ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYx XG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlmICghcmVxMi0+aXNzdWVyKQotCQl7Ci0J CQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIGlzc3VlciBcIiVzXCIsIGdvdCBOVUxMXG4iLCBl eHBlY3RlZF9pc3N1ZXIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJaWYgKHN0cmNtcChleHBl Y3RlZF9pc3N1ZXIsIHJlcTItPmlzc3VlcikgIT0gMCkKLQkJewotCQkJZnByaW50ZihzdGRlcnIs ICJleHBlY3RlZCBpc3N1ZXIgXCIlc1wiLCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF9pc3N1ZXIs IHJlcTItPmlzc3Vlcik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlpZiAoZXJybXNnKQot CXsKLQkJaWYgKHRva2VuKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fubm90 IGJlIGNvbWJpbmVkIHdpdGggLS10b2tlblxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJZWxz ZSBpZiAoIXJlcTIpCi0JCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJvciBjYW5ub3QgYmUg Y29tYmluZWQgd2l0aCAtdjFcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIocmVxMi0+ZXJyb3IsIGVycm1zZyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQly ZXEtPnRva2VuID0gdG9rZW47Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQb3N0Z3Jlc1BvbGxp bmdTdGF0dXNUeXBlCi1hc3luY19jYihQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0 ICpyZXEsIHBnc29ja2V0ICphbHRzb2NrKQotewotCWlmIChoYW5nX2ZvcmV2ZXIpCi0JewotCQkv KgotCQkgKiBUaGlzIGNvZGUgdGVzdHMgdGhhdCBub3RoaW5nIGlzIGludGVyZmVyaW5nIHdpdGgg bGlicHEncyBoYW5kbGluZwotCQkgKiBvZiBjb25uZWN0X3RpbWVvdXQuCi0JCSAqLwotCQlzdGF0 aWMgcGdzb2NrZXQgc29jayA9IFBHSU5WQUxJRF9TT0NLRVQ7Ci0KLQkJaWYgKHNvY2sgPT0gUEdJ TlZBTElEX1NPQ0tFVCkKLQkJewotCQkJLyogRmlyc3QgY2FsbC4gQ3JlYXRlIGFuIHVuYm91bmQg c29ja2V0IHRvIHdhaXQgb24uICovCi0jaWZkZWYgV0lOMzIKLQkJCVdTQURBVEEJCXdzYURhdGE7 Ci0JCQlpbnQJCQllcnI7Ci0KLQkJCWVyciA9IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwgMiksICZ3 c2FEYXRhKTsKLQkJCWlmIChlcnIpCi0JCQl7Ci0JCQkJcGVycm9yKCJXU0FTdGFydHVwIGZhaWxl ZCIpOwotCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQkJCX0KLSNlbmRpZgotCQkJ c29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKLQkJCWlmIChzb2NrID09IFBH SU5WQUxJRF9TT0NLRVQpCi0JCQl7Ci0JCQkJcGVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIGRhdGFn cmFtIHNvY2tldCIpOwotCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQkJCX0KLQkJ fQotCi0JCS8qIE1ha2UgbGlicHEgd2FpdCBvbiB0aGUgKHVucmVhZGFibGUpIHNvY2tldC4gKi8K LQkJKmFsdHNvY2sgPSBzb2NrOwotCQlyZXR1cm4gUEdSRVNfUE9MTElOR19SRUFESU5HOwotCX0K LQotCXJlcS0+dG9rZW4gPSB0b2tlbjsKLQlyZXR1cm4gUEdSRVNfUE9MTElOR19PSzsKLX0KLQot c3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKLW1pc2JlaGF2ZV9jYihQR2Nvbm4gKmNv bm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEsIHBnc29ja2V0ICphbHRzb2NrKQotewotCWlm IChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJmYWlsLWFzeW5jIikgPT0gMCkKLQl7Ci0JCS8qIEp1 c3QgZmFpbCAibm9ybWFsbHkiLiAqLwotCQlpZiAoZXJybXNnKQotCQl7Ci0JCQlQR29hdXRoQmVh cmVyUmVxdWVzdFYyICpyZXEyOwotCi0JCQlpZiAoaG9va192ZXJzaW9uID09IFBRQVVUSERBVEFf T0FVVEhfQkVBUkVSX1RPS0VOKQotCQkJewotCQkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJvciBj YW5ub3QgYmUgY29tYmluZWQgd2l0aCAtdjFcbiIpOwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0KLQkJ CXJlcTIgPSAoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqKSByZXE7Ci0JCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihyZXEyLT5lcnJvciwgZXJybXNnKTsKLQkJfQotCi0JCXJldHVybiBQR1JFU19QT0xM SU5HX0ZBSUxFRDsKLQl9Ci0JZWxzZSBpZiAoc3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAibm8tdG9r ZW4iKSA9PSAwKQotCXsKLQkJLyogQ2FsbGJhY2tzIG11c3QgYXNzaWduIHJlcS0+dG9rZW4gYmVm b3JlIHJldHVybmluZyBPSy4gKi8KLQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7Ci0JfQotCWVs c2UgaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLXNvY2tldCIpID09IDApCi0JewotCQkv KiBDYWxsYmFja3MgbXVzdCBhc3NpZ24gKmFsdHNvY2sgYmVmb3JlIGFza2luZyBmb3IgcG9sbGlu Zy4gKi8KLQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKLQl9Ci0JZWxzZQotCXsKLQkJ ZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgLS1taXNiZWhhdmUgbW9kZTogJXNcbiIsIG1p c2JlaGF2ZV9tb2RlKTsKLQkJZXhpdCgxKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5jIGIvc3JjL3Rlc3QvbW9k dWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjJhNWIxODBhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5jCkBAIC0w LDAgKzEsMzc0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0aF90ZXN0X2NvbW1v bi5jCisgKgkgIFNoYXJlZCBmdW5jdGlvbmFsaXR5IGZvciBvYXV0aF9ob29rX2NsaWVudCBhbmQg b2F1dGhfZmxvdworICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVk ZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUg ImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAibGlicHEtZmUuaCIKKyNpbmNsdWRlICJwcWV4cGJ1 ZmZlci5oIgorCisjaW5jbHVkZSAib2F1dGhfdGVzdF9jb21tb24uaCIKKworc3RhdGljIFBvc3Rn cmVzUG9sbGluZ1N0YXR1c1R5cGUgYXN5bmNfY2IoUEdjb25uICpjb25uLAorCQkJCQkJCQkJCSAg UEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwKKwkJCQkJCQkJCQkgIHBnc29ja2V0ICphbHRzb2Nr KTsKK3N0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIG1pc2JlaGF2ZV9jYihQR2Nvbm4g KmNvbm4sCisJCQkJCQkJCQkJCSAgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwKKwkJCQkJCQkJ CQkJICBwZ3NvY2tldCAqYWx0c29jayk7CisKKy8qIC0tb3B0aW9ucyAqLworc3RhdGljIGJvb2wg bm9faG9vayA9IGZhbHNlOworc3RhdGljIGJvb2wgaGFuZ19mb3JldmVyID0gZmFsc2U7CitzdGF0 aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfdXJpID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpl eHBlY3RlZF9pc3N1ZXIgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3Njb3Bl ID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICptaXNiZWhhdmVfbW9kZSA9IE5VTEw7CitzdGF0 aWMgY2hhciAqdG9rZW4gPSBOVUxMOworc3RhdGljIGNoYXIgKmVycm1zZyA9IE5VTEw7CitzdGF0 aWMgaW50CWhvb2tfdmVyc2lvbiA9IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyOwor CisvKgorICogWFhYOiBzdHJlc3NfYXN5bmMgaXMgZXhwb3J0ZWQgZm9yIHRoZSBiZW5lZml0IG9m IG9hdXRoX2hvb2tfY2xpZW50LiBTaW5jZQorICogd2Ugb25seSB1c2UgcHVibGljIGhlYWRlcnMg KGxpYnBxLWZlLmgpIGZvciBvYXV0aF9mbG93LCBpdCBuZWVkcyB0byBiZSBhbiBpbnQKKyAqIHJh dGhlciB0aGFuIGEgYm9vbC4KKyAqLworaW50CQkJc3RyZXNzX2FzeW5jID0gZmFsc2U7CisKK3N0 YXRpYyB2b2lkCit1c2FnZShjaGFyICphcmd2W10pCit7CisJcHJpbnRmKCJ1c2FnZTogJXMgW2Zs YWdzXSBDT05OSU5GT1xuXG4iLCBhcmd2WzBdKTsKKworCXByaW50ZigicmVjb2duaXplZCBmbGFn czpcbiIpOworCXByaW50ZigiICAtaCwgLS1oZWxwICAgICAgICAgICAgICBzaG93IHRoaXMgbWVz c2FnZVxuIik7CisJcHJpbnRmKCIgIC12IFZFUlNJT04gICAgICAgICAgICAgIHNlbGVjdCB0aGUg aG9vayBBUEkgdmVyc2lvbiAoZGVmYXVsdCAyKVxuIik7CisJcHJpbnRmKCIgIC0tZXhwZWN0ZWQt c2NvcGUgU0NPUEUgIGZhaWwgaWYgcmVjZWl2ZWQgc2NvcGVzIGRvIG5vdCBtYXRjaCBTQ09QRVxu Iik7CisJcHJpbnRmKCIgIC0tZXhwZWN0ZWQtdXJpIFVSSSAgICAgIGZhaWwgaWYgcmVjZWl2ZWQg Y29uZmlndXJhdGlvbiBsaW5rIGRvZXMgbm90IG1hdGNoIFVSSVxuIik7CisJcHJpbnRmKCIgIC0t ZXhwZWN0ZWQtaXNzdWVyIElTUyAgIGZhaWwgaWYgcmVjZWl2ZWQgaXNzdWVyIGRvZXMgbm90IG1h dGNoIElTUyAodjIgb25seSlcbiIpOworCXByaW50ZigiICAtLW1pc2JlaGF2ZT1NT0RFICAgICAg ICBoYXZlIHRoZSBob29rIGZhaWwgcmVxdWlyZWQgcG9zdGNvbmRpdGlvbnNcbiIKKwkJICAgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgKE1PREVzOiBuby1ob29rLCBmYWlsLWFzeW5jLCBuby10 b2tlbiwgbm8tc29ja2V0KVxuIik7CisJcHJpbnRmKCIgIC0tbm8taG9vayAgICAgICAgICAgICAg IGRvbid0IGluc3RhbGwgT0F1dGggaG9va3NcbiIpOworCXByaW50ZigiICAtLWhhbmctZm9yZXZl ciAgICAgICAgICBkb24ndCBldmVyIHJldHVybiBhIHRva2VuIChjb21iaW5lIHdpdGggY29ubmVj dF90aW1lb3V0KVxuIik7CisJcHJpbnRmKCIgIC0tdG9rZW4gVE9LRU4gICAgICAgICAgIHVzZSB0 aGUgcHJvdmlkZWQgVE9LRU4gdmFsdWVcbiIpOworCXByaW50ZigiICAtLWVycm9yIEVSUk1TRyAg ICAgICAgICBmYWlsIGluc3RlYWQsIHdpdGggdGhlIGdpdmVuIEVSUk1TRyAodjIgb25seSlcbiIp OworCXByaW50ZigiICAtLXN0cmVzcy1hc3luYyAgICAgICAgICBidXN5LWxvb3Agb24gUFFjb25u ZWN0UG9sbCByYXRoZXIgdGhhbiBwb2xsaW5nXG4iKTsKK30KKworY2hhciAqCitvYXV0aF90ZXN0 X3BhcnNlX2FyZ3YoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IGZvcl9wbHVnaW4pCit7CisJ c3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJCXsiaGVscCIs IG5vX2FyZ3VtZW50LCBOVUxMLCAnaCd9LAorCisJCXsiZXhwZWN0ZWQtc2NvcGUiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgMTAwMH0sCisJCXsiZXhwZWN0ZWQtdXJpIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsIDEwMDF9LAorCQl7Im5vLWhvb2siLCBub19hcmd1bWVudCwgTlVMTCwgMTAw Mn0sCisJCXsidG9rZW4iLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAwM30sCisJCXsiaGFu Zy1mb3JldmVyIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDR9LAorCQl7Im1pc2JlaGF2ZSIsIHJl cXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA1fSwKKwkJeyJzdHJlc3MtYXN5bmMiLCBub19hcmd1 bWVudCwgTlVMTCwgMTAwNn0sCisJCXsiZXhwZWN0ZWQtaXNzdWVyIiwgcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsIDEwMDd9LAorCQl7ImVycm9yIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEw MDh9LAorCQl7MH0KKwl9OworCisJaW50CQkJYzsKKworCWlmIChmb3JfcGx1Z2luKQorCXsKKwkJ LyogVGhlICJyZWFsIiBhcmd2IGhhcyBhbHJlYWR5IGJlZW4gcGFyc2VkLiBSZXNldCBvcHRpbmQu ICovCisJCW9wdGluZCA9IDE7CisJfQorCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywg YXJndiwgImh2OiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQorCXsKKwkJc3dpdGNoIChj KQorCQl7CisJCQljYXNlICdoJzoKKwkJCQl1c2FnZShhcmd2KTsKKwkJCQlleGl0KDApOworCisJ CQljYXNlICd2JzoKKwkJCQlpZiAoc3RyY21wKG9wdGFyZywgIjEiKSA9PSAwKQorCQkJCQlob29r X3ZlcnNpb24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTjsKKwkJCQllbHNlIGlmIChz dHJjbXAob3B0YXJnLCAiMiIpID09IDApCisJCQkJCWhvb2tfdmVyc2lvbiA9IFBRQVVUSERBVEFf T0FVVEhfQkVBUkVSX1RPS0VOX1YyOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCXVzYWdlKGFyZ3Yp OworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSAxMDAwOgkJCS8q IC0tZXhwZWN0ZWQtc2NvcGUgKi8KKwkJCQlleHBlY3RlZF9zY29wZSA9IG9wdGFyZzsKKwkJCQli cmVhazsKKworCQkJY2FzZSAxMDAxOgkJCS8qIC0tZXhwZWN0ZWQtdXJpICovCisJCQkJZXhwZWN0 ZWRfdXJpID0gb3B0YXJnOworCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDI6CQkJLyogLS1uby1o b29rICovCisJCQkJbm9faG9vayA9IHRydWU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwMzoJ CQkvKiAtLXRva2VuICovCisJCQkJdG9rZW4gPSBvcHRhcmc7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgMTAwNDoJCQkvKiAtLWhhbmctZm9yZXZlciAqLworCQkJCWhhbmdfZm9yZXZlciA9IHRydWU7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwNToJCQkvKiAtLW1pc2JlaGF2ZSAqLworCQkJCW1p c2JlaGF2ZV9tb2RlID0gb3B0YXJnOworCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDY6CQkJLyog LS1zdHJlc3MtYXN5bmMgKi8KKwkJCQlzdHJlc3NfYXN5bmMgPSB0cnVlOworCQkJCWJyZWFrOwor CisJCQljYXNlIDEwMDc6CQkJLyogLS1leHBlY3RlZC1pc3N1ZXIgKi8KKwkJCQlleHBlY3RlZF9p c3N1ZXIgPSBvcHRhcmc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwODoJCQkvKiAtLWVycm9y ICovCisJCQkJZXJybXNnID0gb3B0YXJnOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJ CXVzYWdlKGFyZ3YpOworCQkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoYXJnYyAhPSAoZm9y X3BsdWdpbiA/IG9wdGluZCA6IG9wdGluZCArIDEpKQorCXsKKwkJdXNhZ2UoYXJndik7CisJCWV4 aXQoMSk7CisJfQorCisJcmV0dXJuIGFyZ3Zbb3B0aW5kXTsKK30KKworLyoKKyAqIFBRYXV0aERh dGFIb29rIGltcGxlbWVudGF0aW9uLiBSZXBsYWNlcyB0aGUgZGVmYXVsdCBjbGllbnQgZmxvdyBi eSBoYW5kbGluZworICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5bX1YyXS4KKyAqLwor aW50CitvYXV0aF90ZXN0X2F1dGhkYXRhX2hvb2soUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNv bm4sIHZvaWQgKmRhdGEpCit7CisJUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcTsKKwlQR29hdXRo QmVhcmVyUmVxdWVzdFYyICpyZXEyID0gTlVMTDsKKworCUFzc2VydChob29rX3ZlcnNpb24gPT0g UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4gfHwKKwkJICAgaG9va192ZXJzaW9uID09IFBR QVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyKTsKKworCWlmIChub19ob29rIHx8IHR5cGUg IT0gaG9va192ZXJzaW9uKQorCQlyZXR1cm4gMDsKKworCXJlcSA9IGRhdGE7CisJaWYgKHR5cGUg PT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIpCisJCXJlcTIgPSBkYXRhOworCisJ aWYgKGhhbmdfZm9yZXZlcikKKwl7CisJCS8qIFN0YXJ0IGFzeW5jaHJvbm91cyBwcm9jZXNzaW5n LiAqLworCQlyZXEtPmFzeW5jID0gYXN5bmNfY2I7CisJCXJldHVybiAxOworCX0KKworCWlmICht aXNiZWhhdmVfbW9kZSkKKwl7CisJCWlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJuby1ob29r IikgIT0gMCkKKwkJCXJlcS0+YXN5bmMgPSBtaXNiZWhhdmVfY2I7CisJCXJldHVybiAxOworCX0K KworCWlmIChleHBlY3RlZF91cmkpCisJeworCQlpZiAoIXJlcS0+b3BlbmlkX2NvbmZpZ3VyYXRp b24pCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgVVJJIFwiJXNcIiwgZ290IE5V TExcbiIsIGV4cGVjdGVkX3VyaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoc3RyY21w KGV4cGVjdGVkX3VyaSwgcmVxLT5vcGVuaWRfY29uZmlndXJhdGlvbikgIT0gMCkKKwkJeworCQkJ ZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBVUkkgXCIlc1wiLCBnb3QgXCIlc1wiXG4iLCBleHBl Y3RlZF91cmksIHJlcS0+b3BlbmlkX2NvbmZpZ3VyYXRpb24pOworCQkJcmV0dXJuIC0xOworCQl9 CisJfQorCisJaWYgKGV4cGVjdGVkX3Njb3BlKQorCXsKKwkJaWYgKCFyZXEtPnNjb3BlKQorCQl7 CisJCQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIHNjb3BlIFwiJXNcIiwgZ290IE5VTExcbiIs IGV4cGVjdGVkX3Njb3BlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChzdHJjbXAoZXhw ZWN0ZWRfc2NvcGUsIHJlcS0+c2NvcGUpICE9IDApCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAi ZXhwZWN0ZWQgc2NvcGUgXCIlc1wiLCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF9zY29wZSwgcmVx LT5zY29wZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAoZXhwZWN0ZWRfaXNzdWVy KQorCXsKKwkJaWYgKCFyZXEyKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXhwZWN0ZWQt aXNzdWVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQlyZXR1cm4gLTE7CisJ CX0KKworCQlpZiAoIXJlcTItPmlzc3VlcikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJleHBl Y3RlZCBpc3N1ZXIgXCIlc1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRfaXNzdWVyKTsKKwkJCXJl dHVybiAtMTsKKwkJfQorCisJCWlmIChzdHJjbXAoZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1 ZXIpICE9IDApCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNc IiwgZ290IFwiJXNcIlxuIiwgZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIpOworCQkJcmV0 dXJuIC0xOworCQl9CisJfQorCisJaWYgKGVycm1zZykKKwl7CisJCWlmICh0b2tlbikKKwkJewor CQkJZnByaW50ZihzdGRlcnIsICItLWVycm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC0tdG9r ZW5cbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWVsc2UgaWYgKCFyZXEyKQorCQl7CisJCQlm cHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsK KwkJCXJldHVybiAtMTsKKwkJfQorCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHJlcTItPmVycm9y LCBlcnJtc2cpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmVxLT50b2tlbiA9IHRva2VuOworCXJl dHVybiAxOworfQorCisvKgorICogU2V0cyB1cCBhIHJlcXVlc3QgZm9yIGEgcGx1Z2luIG1vZHVs ZSAocGdfc3RhcnRfb2F1dGhiZWFyZXIoKSkgcmF0aGVyIHRoYW4KKyAqIHVzaW5nIHRoZSBob29r LgorICovCitpbnQKK29hdXRoX3Rlc3Rfc3RhcnRfZmxvdyhQR2Nvbm4gKmNvbm4sIFBHb2F1dGhC ZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCit7CisJaW50CQkJcmV0OworCisJLyoKKwkgKiBXZSBj YW4gc3RpbGwgZGVmZXIgdG8gdGhlIGhvb2sgYWJvdmUgdG8gYXZvaWQgY29weWluZyBjb2RlOyB3 ZSBqdXN0CisJICogaGF2ZSB0byB0cmFuc2xhdGUgdGhlIHJldHVybiB2YWx1ZS4KKwkgKi8KKwly ZXQgPSBvYXV0aF90ZXN0X2F1dGhkYXRhX2hvb2soUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9L RU5fVjIsIGNvbm4sCisJCQkJCQkJCSAgIHJlcXVlc3QpOworCisJaWYgKHJldCA9PSAwKQorCXsK KwkJLyogVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgdGVzdC4gKi8KKwkJZnByaW50ZihzdGRlcnIsICJw bHVnaW4gdGVzdHMgY2Fubm90IG1ha2UgdXNlIG9mIC12MSBvciAtLW5vLWhvb2tcbiIpOworCQll eGl0KDEpOworCX0KKworCXJldHVybiAocmV0ID09IDEpID8gMCA6IC0xOworfQorCitzdGF0aWMg UG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZQorYXN5bmNfY2IoUEdjb25uICpjb25uLCBQR29hdXRo QmVhcmVyUmVxdWVzdCAqcmVxLCBwZ3NvY2tldCAqYWx0c29jaykKK3sKKwlpZiAoaGFuZ19mb3Jl dmVyKQorCXsKKwkJLyoKKwkJICogVGhpcyBjb2RlIHRlc3RzIHRoYXQgbm90aGluZyBpcyBpbnRl cmZlcmluZyB3aXRoIGxpYnBxJ3MgaGFuZGxpbmcKKwkJICogb2YgY29ubmVjdF90aW1lb3V0Lgor CQkgKi8KKwkJc3RhdGljIHBnc29ja2V0IHNvY2sgPSBQR0lOVkFMSURfU09DS0VUOworCisJCWlm IChzb2NrID09IFBHSU5WQUxJRF9TT0NLRVQpCisJCXsKKwkJCS8qIEZpcnN0IGNhbGwuIENyZWF0 ZSBhbiB1bmJvdW5kIHNvY2tldCB0byB3YWl0IG9uLiAqLworI2lmZGVmIFdJTjMyCisJCQlXU0FE QVRBCQl3c2FEYXRhOworCQkJaW50CQkJZXJyOworCisJCQllcnIgPSBXU0FTdGFydHVwKE1BS0VX T1JEKDIsIDIpLCAmd3NhRGF0YSk7CisJCQlpZiAoZXJyKQorCQkJeworCQkJCXBlcnJvcigiV1NB U3RhcnR1cCBmYWlsZWQiKTsKKwkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CisJCQl9 CisjZW5kaWYKKwkJCXNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisJCQlp ZiAoc29jayA9PSBQR0lOVkFMSURfU09DS0VUKQorCQkJeworCQkJCXBlcnJvcigiZmFpbGVkIHRv IGNyZWF0ZSBkYXRhZ3JhbSBzb2NrZXQiKTsKKwkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlM RUQ7CisJCQl9CisJCX0KKworCQkvKiBNYWtlIGxpYnBxIHdhaXQgb24gdGhlICh1bnJlYWRhYmxl KSBzb2NrZXQuICovCisJCSphbHRzb2NrID0gc29jazsKKwkJcmV0dXJuIFBHUkVTX1BPTExJTkdf UkVBRElORzsKKwl9CisKKwlyZXEtPnRva2VuID0gdG9rZW47CisJcmV0dXJuIFBHUkVTX1BPTExJ TkdfT0s7Cit9CisKK3N0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCittaXNiZWhhdmVf Y2IoUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLCBwZ3NvY2tldCAqYWx0 c29jaykKK3sKKwlpZiAoc3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAiZmFpbC1hc3luYyIpID09IDAp CisJeworCQkvKiBKdXN0IGZhaWwgIm5vcm1hbGx5Ii4gKi8KKwkJaWYgKGVycm1zZykKKwkJewor CQkJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxMjsKKworCQkJaWYgKGhvb2tfdmVyc2lvbiA9 PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTikKKwkJCXsKKwkJCQlmcHJpbnRmKHN0ZGVy ciwgIi0tZXJyb3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKKwkJCQlleGl0KDEp OworCQkJfQorCisJCQlyZXEyID0gKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKikgcmVxOworCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocmVxMi0+ZXJyb3IsIGVycm1zZyk7CisJCX0KKworCQlyZXR1 cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CisJfQorCWVsc2UgaWYgKHN0cmNtcChtaXNiZWhhdmVf bW9kZSwgIm5vLXRva2VuIikgPT0gMCkKKwl7CisJCS8qIENhbGxiYWNrcyBtdXN0IGFzc2lnbiBy ZXEtPnRva2VuIGJlZm9yZSByZXR1cm5pbmcgT0suICovCisJCXJldHVybiBQR1JFU19QT0xMSU5H X09LOworCX0KKwllbHNlIGlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJuby1zb2NrZXQiKSA9 PSAwKQorCXsKKwkJLyogQ2FsbGJhY2tzIG11c3QgYXNzaWduICphbHRzb2NrIGJlZm9yZSBhc2tp bmcgZm9yIHBvbGxpbmcuICovCisJCXJldHVybiBQR1JFU19QT0xMSU5HX1JFQURJTkc7CisJfQor CWVsc2UKKwl7CisJCWZwcmludGYoc3RkZXJyLCAidW5yZWNvZ25pemVkIC0tbWlzYmVoYXZlIG1v ZGU6ICVzXG4iLCBtaXNiZWhhdmVfbW9kZSk7CisJCWV4aXQoMSk7CisJfQorfQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsIGIvc3Jj L3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsCmluZGV4IDBjZWU3 MmVmNThlLi5kOGVjZWJkZmQxZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92 YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFs aWRhdG9yL3QvMDAyX2NsaWVudC5wbApAQCAtMSw2ICsxLDYgQEAKICMKICMgRXhlcmNpc2VzIHRo ZSBBUEkgZm9yIGN1c3RvbSBPQXV0aCBjbGllbnQgZmxvd3MsIHVzaW5nIHRoZSBvYXV0aF9ob29r X2NsaWVudAotIyB0ZXN0IGRyaXZlci4KKyMgdGVzdCBkcml2ZXIgYW5kIHRoZSBvYXV0aF9mbG93 IGN1c3RvbSBwbHVnaW4uCiAjCiAjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogIwpAQCAtMjAsNiArMjAsMTAgQEAgaWYgKCEkRU5W e1BHX1RFU1RfRVhUUkF9IHx8ICRFTlZ7UEdfVEVTVF9FWFRSQX0gIX4gL1xib2F1dGhcYi8pCiAJ ICAnUG90ZW50aWFsbHkgdW5zYWZlIHRlc3Qgb2F1dGggbm90IGVuYWJsZWQgaW4gUEdfVEVTVF9F WFRSQSc7CiB9CiAKK215ICRwbHVnaW5fc3VwcG9ydGVkID0gKAorCQkgY2hlY2tfcGdfY29uZmln KCIjZGVmaW5lIEhBVkVfU1lTX0VWRU5UX0ggMSIpCisJICBvciBjaGVja19wZ19jb25maWcoIiNk ZWZpbmUgSEFWRV9TWVNfRVBPTExfSCAxIikpOworCiAjCiAjIENsdXN0ZXIgU2V0dXAKICMKQEAg LTcyLDYgKzc2LDggQEAgc3ViIHRlc3QKIAkJJGZsYWdzID0gJHBhcmFtc3tmbGFnc307CiAJfQog CisJIyBGaXJzdCBydW4gdGhlIG9hdXRoX2hvb2tfY2xpZW50LCB3aGljaCB1c2VzIFBRYXV0aERh dGFIb29rIHRvIGluc2VydCBhIG5ldworCSMgT0F1dGggZmxvdy4KIAlteSBAY21kID0gKCJvYXV0 aF9ob29rX2NsaWVudCIsIEB7JGZsYWdzfSwgJGNvbW1vbl9jb25uc3RyKTsKIAlub3RlICJydW5u aW5nICciIC4gam9pbigiJyAnIiwgQGNtZCkgLiAiJyI7CiAKQEAgLTEwMyw2ICsxMDksMzcgQEAg c3ViIHRlc3QKIAkJJG5vZGUtPmxvZ19jaGVjaygiJHRlc3RfbmFtZTogbG9nIG1hdGNoZXMiLAog CQkJJGxvZ19zdGFydCwgbG9nX2xpa2UgPT4gJHBhcmFtc3tsb2dfbGlrZX0pOwogCX0KKworICBT S0lQOgorCXsKKwkJbGFzdCBTS0lQIGlmICRwYXJhbXN7aG9va19vbmx5fTsKKwkJc2tpcCAiT0F1 dGggbW9kdWxlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIgorCQkgIHVubGVz cyAkcGx1Z2luX3N1cHBvcnRlZDsKKworCQkjIFJ1biB0aGUgc2FtZSB0ZXN0IHdpdGggcHNxbCBp dHNlbGYsIGxvYWRpbmcgdGhlIG9hdXRoX2Zsb3cuc28gbW9kdWxlLgorCQlsb2NhbCAkRU5We1BH T0FVVEhNT0RVTEV9ID0gJEVOVntmbG93X21vZHVsZV9wYXRofTsKKworCQkjIEZsYWdzIGFyZSBw YXNzZWQgdG8gdGhlIG1vZHVsZSB2aWEgT0FVVEhfVEVTVF9GTEFHUywgd2l0aCAweDAxIGFzIGEK KwkJIyBzZXBhcmF0b3IuCisJCWxvY2FsICRFTlZ7T0FVVEhfVEVTVF9GTEFHU30gPSBqb2luKCJc eDAxIiwgQHskZmxhZ3N9KTsKKworCQlpZiAoJHBhcmFtc3tleHBlY3Rfc3VjY2Vzc30pCisJCXsK KwkJCSRub2RlLT5jb25uZWN0X29rKAorCQkJCSRjb21tb25fY29ubnN0ciwKKwkJCQkiW3BsdWdp biBmbG93XSAkdGVzdF9uYW1lIiwKKwkJCQlleHBlY3RlZF9zdGRlcnIgPT4gJHBhcmFtc3tleHBl Y3RlZF9zdGRlcnJ9LAorCQkJCWxvZ19saWtlID0+ICRwYXJhbXN7bG9nX2xpa2V9KTsKKwkJfQor CQllbHNlCisJCXsKKwkJCSRub2RlLT5jb25uZWN0X2ZhaWxzKAorCQkJCSRjb21tb25fY29ubnN0 ciwKKwkJCQkiW3BsdWdpbiBmbG93XSAkdGVzdF9uYW1lIiwKKwkJCQlleHBlY3RlZF9zdGRlcnIg PT4gJHBhcmFtc3tleHBlY3RlZF9zdGRlcnJ9LAorCQkJCWxvZ19saWtlID0+ICRwYXJhbXN7bG9n X2xpa2V9KTsKKwkJfQorCX0KIH0KIAogdGVzdCgKQEAgLTExOSw2ICsxNTYsNyBAQCB0ZXN0KAog IyBNYWtlIHN1cmUgdGhlIHYxIGhvb2sgY29udGludWVzIHRvIHdvcmsuICovCiB0ZXN0KAogCSJ2 MSBzeW5jaHJvbm91cyBob29rIGNhbiBwcm92aWRlIGEgdG9rZW4iLAorCWhvb2tfb25seSA9PiAx LCAgICAjIHBsdWdpbnMgZG9uJ3Qgc3VwcG9ydCBBUEkgdjEKIAlmbGFncyA9PiBbCiAJCSItdjEi LAogCQkiLS10b2tlbiIgPT4gIm15LXRva2VuLXYxIiwKQEAgLTEzMyw2ICsxNzEsNyBAQCBpZiAo JEVOVnt3aXRoX2xpYmN1cmx9IG5lICd5ZXMnKQogCSMgbGlicHEgc2hvdWxkIGhlbHAgdXNlcnMg b3V0IGlmIG5vIE9BdXRoIHN1cHBvcnQgaXMgYnVpbHQgaW4uCiAJdGVzdCgKIAkJImZhaWxzIHdp dGhvdXQgY3VzdG9tIGhvb2sgaW5zdGFsbGVkIiwKKwkJaG9va19vbmx5ID0+IDEsICAgICMgcGx1 Z2lucyBjYW4ndCB1c2UgLS1uby1ob29rCiAJCWZsYWdzID0+IFsiLS1uby1ob29rIl0sCiAJCWV4 cGVjdGVkX3N0ZGVyciA9PgogCQkgIHFyL25vIE9BdXRoIGZsb3dzIGFyZSBhdmFpbGFibGUgXCh0 cnkgaW5zdGFsbGluZyB0aGUgbGlicHEtb2F1dGggcGFja2FnZVwpLwotLSAKMi4zNC4xCgo= --000000000000341f9f06458b36fb--