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.98.2) (envelope-from ) id 1x7tbN-00000000n4z-44Yw for pgsql-hackers@arkaria.postgresql.org; Sat, 19 Sep 2026 11:51:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1x7tbL-00000004fRk-2oe3 for pgsql-hackers@arkaria.postgresql.org; Sat, 19 Sep 2026 11:51:27 +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.98.2) (envelope-from ) id 1x7tbK-00000004fQ2-3keq for pgsql-hackers@lists.postgresql.org; Sat, 19 Sep 2026 11:51:27 +0000 Received: from mail-ej2-x10.google.com ([2a00:1450:4864:34::10]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1x7tbF-00000000Bf1-2MTd for pgsql-hackers@lists.postgresql.org; Sat, 19 Sep 2026 11:51:26 +0000 Received: by mail-ej2-x10.google.com with SMTP id a640c23a62f3a-c254f6c7a58so233100066b.2 for ; Sat, 19 Sep 2026 04:51:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789818680; x=1790423480; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:from:to:cc :subject:date:message-id:reply-to:content-type; bh=Xz0YRwSI6BbLnqpXrbeBYart0k60Z34CQUJ1BnknU54=; b=mqnEasC+bwTGpQvUTM0WohLF8omqUkZl5PWGmoojoDN+vlQxexY7t6EQ+uXZfznxTO YPyYcE+5d5KvX237yPWHrY+ZU9W6NV4DJ7qt594TFs4g/frOiqq9aADISQtLiXhbsIGa VGkFGltuQoxP8OJpMu2sU+3/wce7XPsM44SqjskLFUFEPX6ACm77rtbAp7OnmCxWe8iE LDGlApDftuBnDLXJlN12URsr1r2aGQRFNc0vCkWxn7IdX2FyxHCKfApjc8R5HTpQIscJ p8yW7aMIyLkfmoF9lHetVPo6A2nmKEAG2RlqHMrHwnBTTowja26oDpoCRUSPoF0lAPo6 hylQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789818680; x=1790423480; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Xz0YRwSI6BbLnqpXrbeBYart0k60Z34CQUJ1BnknU54=; b=MSCbYjONQ/k6dNVnhob/9BSyrtrR2EuqeOPs0agf/zDKIG9UvsWp4mrLwN2Cl9yu/v f5MCDeZmCixIiNoCIeYUZG+UHtXyFIo1hi6SLRMXrF2AqnfI4zmCsm7gSNOAqVj1Kl6E vuBkXuZdvt4c1/ParyajniZxM9h79g6obYz0cQBMb+6mJOYCT2C0aD81SQK6ER8rHj52 OWlVoeugbAXRKAvrDpP8elEUtmMzbUcHoPI8Ct5c8cMwaHtuxkZ5tOk4vuXNW/1RT/Ru ohDH0yCjmvFgajPyLvZI0hGb2oYxepiyJjq7e7yb4Jg/Ju55ig3TkPdXF0fubPnsUZn/ W8vA== X-Forwarded-Encrypted: i=1; AKwUvBwDz1R4do38H3HJrLosuweFYQLtBgfXz3/Z6pZUjCwrbix36akW+DaCDjZT32giUqlpF2BudleZps7ikJhY@lists.postgresql.org X-Gm-Message-State: AFuF++kYrpjcRKuS3G0FBURmonjX0baD66tUurUSC6cSqU8eoVXDPfzY QqzNrie4bO3Y91HojBjYv8SLC3QSuCK59DGVjBIHV3l41ucAjMqMvN3n X-Gm-Gg: AYBFou2HgPEOVfyeXAgvQfq0buu/Uktx+cz/xbF98+qKfMnrUohHKKOCZMqJz6VY7Jj nQFRzuQ3wrMCeZeTDsc0uzoPOyM5itlgXnC1Xrcfi+1r+/Q2WuQhtKVjTCKY23DqUi7nK5W0BsQ 9XSeiNawnccoQBr0wGgqfLrRusluiPwYGP6Nb7xXmOPzPM2tdto6djMVaT6KWouTWY6Lfak/YzG iDHHuQnISaLPKWgT8KXXfrymk3xraTN+m9n38XzWvgqbmgNLfPHQcgIuKvTr1vNSg6gQQlCFfqV +zvlb3m69So8B7dRz0sxJSoEtLBieSEIQkI5nCYijrl5x5izxURSjil2pcxZzGII5K7us9Q1T19 Z+83xth7G1p3dGmglnhBlo7G8jxC7o2QhOI2ijjtAOJta/kjcqtQZoW6YzP0iaVjXENDcRPyvFP xIWrMhU8sNmIcqX6kExFZfQbPRVcvZGIETkCDa92MQUPUzG6gHgdKhVaS/KrITpFOKOTRpM+FoD 0s5hhmbh029RvBnvJk23aA5PDWFCOClszh+z9L8 X-Received: by 2002:a17:907:94cf:b0:c1f:1520:4de5 with SMTP id a640c23a62f3a-c2a1578a4e8mr461711266b.1.1789818679663; Sat, 19 Sep 2026 04:51:19 -0700 (PDT) Received: from [192.168.0.161] (c151-177-23-39.bredband.tele2.se. [151.177.23.39]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c2a3570583fsm83372266b.31.2026.09.19.04.51.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 19 Sep 2026 04:51:18 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------peFmvd381bgXA0q0HjkJVA0C" Message-ID: <37d7b054-1b65-4fc9-87f9-839a1e791fc5@gmail.com> Date: Sat, 19 Sep 2026 13:51:17 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: pg_rewind does not rewind diverging timelines To: Japin Li Cc: Andrey Borodin , pgsql-hackers mailing list References: <80D76C66-A953-466C-8295-A1CF8365A4D2@yandex-team.ru> <10351a09-3a93-49fc-a366-d616b67c6ede@gmail.com> Content-Language: en-US From: Mats Kindahl In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------peFmvd381bgXA0q0HjkJVA0C Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi all, I have created a commitfest issue (https://commitfest.postgresql.org/patch/7317/) and also rebased the patch on the latest HEAD (attached). Best wishes, Mats Kindahl, Multigres Engineer, Supabase On 7/17/26 17:59, Japin Li wrote: > Hi, all > > On Sun, 21 Jun 2026 at 11:09, Mats Kindahl wrote: >> On 6/8/26 12:48, Andrey Borodin wrote: >> >> On 30 Apr 2026, at 13:19, Mats Kindahl wrote: >> >> There is one scenario that I assume is known that TLC found, but does not seem to be fixed. It is a relatively rare case, but since the fix is quite easy, I thought I'd share it with you and get feedback. >> >> Hi Mats, >> >> Hi Andrey, >> >> Thanks for looking at this. >> >> Thanks for working on this. I think the problem is real, but I wonder if >> adding a separate UUID to timeline history files is solving it one step >> too late. >> >> If two independent promotions manage to choose the same numeric TLI, then >> we already have two different histories with the same timeline identifier. >> Their history files will also have the same name. A UUID in the file lets >> tools detect the mismatch afterwards, but it does not prevent the archive >> namespace from containing two different meanings for the same TLI. >> >> Yes, that is correct. >> >> In normal deployments with a shared archive this should only be possible >> when the history file is not visible to the other promoting server: >> either there is no usable restore_command/shared archive, or there is a >> race around publishing and observing the history file. In other words, TLI >> allocation is not atomic, but it is intended to be coordinated through the >> archive. >> >> Yes, that is the ideal way it should work when you have a shared archive. This works because you have a central authority >> that synchronizes the timelines (in theory, not counting bugs). >> >> Maybe we should keep TimelineID as the actual branch identifier and make >> that allocation harder to collide instead of adding a second identifier. >> For example, when choosing a new TLI, add some randomness rather than just >> using the next sequential value. >> >> That would make the race window much less >> dangerous: two independent promotions would be extremely unlikely to >> choose the same TLI, the history file names would remain distinct, and TLI >> would keep its current role as the timeline identifier. >> This also keeps the operational model simpler. TimelineID is already the >> identifier exposed in WAL file names, history file names, logs, and >> recovery configuration. If we add UUIDs, we effectively introduce another >> identity for the same object, and tools then need to reason about both. >> If instead we make TLI allocation less deterministic under races, the >> existing model remains intact. >> >> Does that framing make sense, or am I missing a case where duplicate TLIs >> are unavoidable even with a shared archive and a less collision-prone >> allocation scheme? >> >> I considered using some random increment of the TLI in the manner you describe but there are some issues that makes this >> solution more complicated from an operational perspective: >> >> * If you skip some TLIs (in the sense pick a TLI that is "random but larger"), then it is not clear what the relation >> between them are. >> >> * The history files contain the complete linkage of the timelines, so that is covered, but the naming would be strange. >> >> * For example, if you have history files 1, 5, 7, and 8, then these can all belong to different timelines, (except 1), or >> be a single timeline and it is hard to understand which one without looking through the files. >> >> * With more promotions, the relation becomes even more strange, and the risk of collisions increases. (For example, >> imagine one timeline with 1, 5, 7, 8, 11, and one timeline that forks off 1. Then any increment of 4, 6, 7, or 10 will >> result in a collision.) >> >> * To actually reduce the risk significantly, you need to have a very wide range of the added randomness. Taking a smaller >> number is easier to work with, but then you need to handle that some timelines can collide in some manner. >> * Normally, the history file with the highest number will be the only relevant one. With this approach, you have to check >> the contents of the files to understand which ones are relevant, which increases the operational burden. >> >> In contrast, if you use an UUID in this manner. >> >> * Adding an UUID does not require a central coordinator and is not likely to collide (on the level "impossible to >> collide") and is very straightforward to add. It also comes with a low risk since the places in the code that requires >> changes are very few and not likely to have unexpected consequences elsewhere. This works both with and without a >> shared archive. >> * Normally, a shared archive should only contain a single timeline. Anything else is an anomaly and should be corrected. >> * I think it is still necessary to handle the case where you do not have a shared archive; it would be an odd limitation >> to say that promote only works if you have a shared archive >> * The UUID still serves a purpose in capturing a situation where things have gone wrong. Think of the UUID as similar to >> a "checksum" safety and an extra precaution to prevent things from going wrong. >> >> In short, I think the operational issues with random increment of the history file number is worse, not better, and we >> should deal with the name collisions correctly for shared archives instead. There is an issue in that it need to work >> even in the case where you have a promotion that generates a new UUID but the correct history file exists (reported in >> the other message) that I will look into. >> > I would like to know the current status of this patch. I have encountered the > same issue in practice, and I think the proposed solution is reasonable. > > I found that the v6 patch does not apply cleanly to the current master (1f414035135) > because commit 7f77b2a89bd4 changed the parameter type of writeTimeLineHistory(). > > I've rebased the patch and attached v7. > >> Best wishes, >> Mats Kindahl >> >> Best regards, Andrey Borodin. --------------peFmvd381bgXA0q0HjkJVA0C Content-Type: text/x-patch; charset=UTF-8; name="v9.0001-pg_rewind-use-UUIDs-to-detect-independent-same-TLI-p.patch" Content-Disposition: attachment; filename*0="v9.0001-pg_rewind-use-UUIDs-to-detect-independent-same-TLI-p"; filename*1=".patch" Content-Transfer-Encoding: base64 RnJvbSAwZjdhMmY4ZGQ1MjVkMTE1ZmE0N2Q4NDk3N2ZiMmY1MWVmMGEyOTA1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRzIEtpbmRhaGwgPG1hdHNAa2luZGFobC5uZXQ+ CkRhdGU6IFNhdCwgMjMgTWF5IDIwMjYgMTY6MDk6NDQgKzAyMDAKU3ViamVjdDogcGdfcmV3 aW5kOiB1c2UgVVVJRHMgdG8gZGV0ZWN0IGluZGVwZW5kZW50IHNhbWUtVExJIHByb21vdGlv bnMKClR3byBQb3N0Z3JlU1FMIHN0YW5kYnlzIGNhbiBpbmRlcGVuZGVudGx5IHByb21vdGUg dG8gdGhlIHNhbWUgdGltZWxpbmUKSUQgaWYgdGhlaXIgcHJpbWFyeSBzdG9wcGVkIGJlZm9y ZSBlaXRoZXIgaGFkIGEgY2hhbmNlIHRvIHByb21vdGUuICBJbgp0aGF0IHNpdHVhdGlvbiBi b3RoIGNsdXN0ZXJzIHNoYXJlIGEgdGltZWxpbmUgaGlzdG9yeSBwcmVmaXggdGhhdCBsb29r cwppZGVudGljYWwgdG8gcGdfcmV3aW5kOiBzYW1lIFRMSSBudW1iZXJzIGFuZCBzYW1lIGJl Z2luL2VuZCBMU05zLiAgVGhlCmV4aXN0aW5nIHNhbWUtVExJIHNob3J0Y3V0IHRoZXJlZm9y ZSB0cmVhdGVkIHRoZSBzb3VyY2UgYXMgYSB2YWxpZApyZXdpbmQgdGFyZ2V0IGFuZCBza2lw cGVkIHRoZSByZXdpbmQgZW50aXJlbHksIGxlYXZpbmcgdGhlIHRhcmdldCdzCmRpdmVyZ2Vk IFdBTCBpbnRhY3QuCgpGaXggdGhpcyBieSBlbWJlZGRpbmcgYSBVVUlEdjcgdmFsdWUgaW4g ZXZlcnkgdGltZWxpbmUgaGlzdG9yeSBmaWxlCmVudHJ5IGF0IHByb21vdGlvbiB0aW1lLiAg RWFjaCBwcm9tb3Rpb24gZ2VuZXJhdGVzIGEgZnJlc2ggVVVJRCwgc28gdHdvCmluZGVwZW5k ZW50IHByb21vdGlvbnMgdG8gdGhlIHNhbWUgVExJIHdpbGwgY2FycnkgZGlmZmVyZW50IFVV SURzIGV2ZW4KdGhvdWdoIHRoZSBUTEkgbnVtYmVyIGFuZCBiZWdpbiBMU04gYXJlIGlkZW50 aWNhbC4KCldoZW4gbG9hZGluZyB0aGUgdGltZWxpbmUgaGlzdG9yeSwgcGdfcmV3aW5kIHVz ZXMgdGhlc2UgVVVJRHMgaW4gdHdvCnBsYWNlczoKCjEuIGZpbmRDb21tb25BbmNlc3RvclRp bWVsaW5lIGNoZWNrcyB0aGF0IHRoZSBUTEkgYW5kIFVVSUQgaW4gZWFjaCBlbnRyeQogICBt YXRjaC4gIEEgbWlzbWF0Y2ggc2lnbmFscyBpbmRlcGVuZGVudCBwcm9tb3Rpb25zIGFuZCB0 aGUgc2VhcmNoCiAgIGNvbnRpbnVlcyB0byBlYXJsaWVyIGVudHJpZXMgdG8gZmluZCB0aGUg dHJ1ZSBjb21tb24gYW5jZXN0b3IuCgoyLiBUaGUgc2FtZS1UTEkgc2hvcnRjdXQgKHNvdXJj ZSBhbmQgdGFyZ2V0IG9uIHRoZSBzYW1lIGN1cnJlbnQgVExJKQogICBjb21wYXJlcyB0aGUg VVVJRCBzdG9yZWQgaW4gdGhlIGxhc3QgY29tcGxldGVkIGhpc3RvcnkgZW50cnkgYW5kIGEK ICAgbWlzbWF0Y2ggZm9yY2VzIGEgZnVsbCByZXdpbmQgaW5zdGVhZCBvZiBhIG5vLW9wLgoK VVVJRHMgYXJlIHplcm8gZm9yIGNsdXN0ZXJzIHRoYXQgcHJlZGF0ZSB0aGlzIGNoYW5nZSwg YW5kIHRoZSBjb21wYXJpc29uCmZ1bmN0aW9uIHRyZWF0cyBhIHplcm8gVVVJRCBvbiBlaXRo ZXIgc2lkZSBhcyBkaWZmZXJlbnQgZnJvbSBhIFVVSUQKc2luY2UgdGhhdCBwcm9tb3Rpb24g aGFzIHRvIGJlIGZyb20gYSBkaWZmZXJlbnQgc2VydmVyIChpdCBoYWQgYQpwcmUtY2hhbmdl IHZlcnNpb24gc2VydmVyIHRoYXQgd2FzIHByb21vdGVkLCBzbyBpdCBjYW5ub3QgYmUgdGhl IHNhbWUgYXMKYSBwb3N0LWNoYW5nZSB2ZXJzaW9uIHNlcnZlciB0aGF0IHdhcyBwcm9tb3Rl ZCkuCgpCZWZvcmUgdGhpcyBjb21taXQsIFBvc3RncmVzIHRvbGVyYXRlZCB0aGUgdGFyZ2V0 IGhhdmluZyBubyBsb2NhbCBjb3B5Cm9mIHRoZSBoaXN0b3J5IGZpbGUgZm9yIGl0cyBvd24g Y3VycmVudCBUTEkuIFRoaXMgY291bGQgaGFwcGVuIGlmLCAgZm9yCmV4YW1wbGUsIGEgc3Rh bmRieSB0aGF0IHN0YXJ0ZWQgc3RyZWFtaW5nIGEgdGltZWxpbmUgaXQgbmV2ZXIgaXRzZWxm CnN3aXRjaGVkIHRvLCBoZW5jZSBoYWQgbm8gcmVhc29uIHRvIHdyaXRlIG9yIGZldGNoIGEg Y29weSBvZiB0aGF0IGZpbGUuClRoaXMgYmVoYXZpb3VyIGlzIHJldGFpbmVkLgoKVGVzdHMg aW4gdC8wMDVfc2FtZV90aW1lbGluZS5wbCBjb3ZlciB0aGVzZSBwYXRocy4KClRoZSBmaXJz dCBjb3ZlcnMgdGhlIHNhbWUtVExJIHNob3J0Y3V0OiB0d28gc3RhbmRieXMgaW5kZXBlbmRl bnRseQpwcm9tb3RlIHRvIFRMSTIgYW5kIFRMSTInLCBlYWNoIHdpdGggYSBkaXN0aW5jdCBV VUlELgoKVGhlIHNlY29uZCBjb3ZlcnMgdGhlIGFuY2VzdG9yIHNlYXJjaDogdGhlIHRhcmdl dCBnb2VzIHRocm91Z2ggVExJMSAtPgpUTEkyIC0+IFRMSTMgd2hpbGUgdGhlIHNvdXJjZSBp bmRlcGVuZGVudGx5IHByb21vdGVkIHNvIHRoYXQgaXQgaGFzIGEKdGltZWxpbmUgd2l0aCBU TEkxIC0+IFRMSTInIC0+IFRMSTMnLiBUaGUgdGVzdCBlbnN1cmVzIHRoYXQKZmluZENvbW1v bkFuY2VzdG9yVGltZWxpbmUgYmFja3MgdXAgdG8gVExJMSBhcyB0aGUgdHJ1ZSBjb21tb24g YW5jZXN0b3IKcmF0aGVyIHRoYW4gYWNjZXB0aW5nIHRoZSBudW1lcmljYWxseSBtYXRjaGlu ZyBUTEkyIGVudHJ5LgoKVGhlIHRoaXJkIGNvdmVycyB0aGUgbWlzc2luZy1oaXN0b3J5LWZp bGUgZmFsbGJhY2s6IHR3byBzdGFuZGJ5cwppbmRlcGVuZGVudGx5IHByb21vdGUgdG8gVExJ MiwgdGhlIHRhcmdldCdzIG93biBUTEkyIGhpc3RvcnkgZmlsZSBpcwp0aGVuIHJlbW92ZWQs IGFuZCBwZ19yZXdpbmQgaXMgY2hlY2tlZCB0byBubyBsb25nZXIgYWJvcnQgYmVjYXVzZSBv ZiBpdC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jICAgIHwg IDg0ICsrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgIHwg IDE1ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC91dWlkLmMgICAgICAgICAgICAgfCAgMTUg Ky0KIHNyYy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5jICAgICAgICAgICAgfCAxNTkgKysr KysrKy0KIHNyYy9iaW4vcGdfcmV3aW5kL3QvMDA1X3NhbWVfdGltZWxpbmUucGwgfCA0NTkg KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfcmV3aW5kL3RpbWVsaW5lLmMg ICAgICAgICAgICAgfCAgNTggKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGltZWxpbmUuaCAg ICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5o ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3V1aWQuaCAgICAgICAgICAgICAg ICAgfCAgMTAgKy0KIDkgZmlsZXMgY2hhbmdlZCwgNzcyIGluc2VydGlvbnMoKyksIDM0IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3Rp bWVsaW5lLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jCmluZGV4 IGQ4MGM4ZmZlMGE3Li4xZDExNzVjMWIzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vdGltZWxpbmUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS90aW1lbGluZS5jCkBAIC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAj aW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZlbnQuaCIK KyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvdXVpZC5o IgogCiAvKgogICogQ29waWVzIGFsbCB0aW1lbGluZSBoaXN0b3J5IGZpbGVzIHdpdGggaWQn cyBiZXR3ZWVuICdiZWdpbicgYW5kICdlbmQnCkBAIC0xMTAsOCArMTEyLDEyIEBAIHJlYWRU aW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCB0YXJnZXRUTEkpCiAJCQllcmVwb3J0KEZBVEFM LAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkJIGVycm1zZygiY291 bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCkpKTsKLQkJLyogTm90IHRoZXJl LCBzbyBhc3N1bWUgbm8gcGFyZW50cyAqLwotCQllbnRyeSA9IHBhbGxvY19vYmplY3QoVGlt ZUxpbmVIaXN0b3J5RW50cnkpOworCisJCS8qCisJCSAqIE5vdCB0aGVyZSwgc28gYXNzdW1l IG5vIHBhcmVudHMuIFdlIHVzZSBwYWxsb2MwX29iamVjdCB0byBlbnN1cmUKKwkJICogdGhh dCB0bHV1aWQgaXMgYWxsLXplcm8uCisJCSAqLworCQllbnRyeSA9IHBhbGxvYzBfb2JqZWN0 KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKIAkJZW50cnktPnRsaSA9IHRhcmdldFRMSTsKIAkJ ZW50cnktPmJlZ2luID0gZW50cnktPmVuZCA9IEludmFsaWRYTG9nUmVjUHRyOwogCQlyZXR1 cm4gbGlzdF9tYWtlMShlbnRyeSk7CkBAIC0xMjUsNiArMTMxLDcgQEAgcmVhZFRpbWVMaW5l SGlzdG9yeShUaW1lTGluZUlEIHRhcmdldFRMSSkKIAlwcmV2ZW5kID0gSW52YWxpZFhMb2dS ZWNQdHI7CiAJZm9yICg7OykKIAl7CisJCWNoYXIJCXV1aWRfc3RyW1VVSURfU1RSX0xFTiAr IDFdID0gezB9OwogCQljaGFyCQlmbGluZVtNQVhQR1BBVEhdOwogCQljaGFyCSAgICpyZXM7 CiAJCWNoYXIJICAgKnB0cjsKQEAgLTE1NSw3ICsxNjIsOCBAQCByZWFkVGltZUxpbmVIaXN0 b3J5KFRpbWVMaW5lSUQgdGFyZ2V0VExJKQogCQlpZiAoKnB0ciA9PSAnXDAnIHx8ICpwdHIg PT0gJyMnKQogCQkJY29udGludWU7CiAKLQkJbmZpZWxkcyA9IHNzY2FuZihmbGluZSwgIiV1 XHQlWC8lMDhYIiwgJnRsaSwgJnN3aXRjaHBvaW50X2hpLCAmc3dpdGNocG9pbnRfbG8pOwor CQluZmllbGRzID0KKwkJCXNzY2FuZihmbGluZSwgIiV1XHQlWC8lMDhYXHQlMzZzIiwgJnRs aSwgJnN3aXRjaHBvaW50X2hpLCAmc3dpdGNocG9pbnRfbG8sIHV1aWRfc3RyKTsKIAogCQlp ZiAobmZpZWxkcyA8IDEpCiAJCXsKQEAgLTE2NCw3ICsxNzIsNyBAQCByZWFkVGltZUxpbmVI aXN0b3J5KFRpbWVMaW5lSUQgdGFyZ2V0VExJKQogCQkJCQkoZXJybXNnKCJzeW50YXggZXJy b3IgaW4gaGlzdG9yeSBmaWxlOiAlcyIsIGZsaW5lKSwKIAkJCQkJIGVycmhpbnQoIkV4cGVj dGVkIGEgbnVtZXJpYyB0aW1lbGluZSBJRC4iKSkpOwogCQl9Ci0JCWlmIChuZmllbGRzICE9 IDMpCisJCWlmIChuZmllbGRzIDwgMykKIAkJCWVyZXBvcnQoRkFUQUwsCiAJCQkJCShlcnJt c2coInN5bnRheCBlcnJvciBpbiBoaXN0b3J5IGZpbGU6ICVzIiwgZmxpbmUpLAogCQkJCQkg ZXJyaGludCgiRXhwZWN0ZWQgYSB3cml0ZS1haGVhZCBsb2cgc3dpdGNocG9pbnQgbG9jYXRp b24uIikpKTsKQEAgLTE3NiwxMiArMTg0LDUwIEBAIHJlYWRUaW1lTGluZUhpc3RvcnkoVGlt ZUxpbmVJRCB0YXJnZXRUTEkpCiAKIAkJbGFzdHRsaSA9IHRsaTsKIAotCQllbnRyeSA9IHBh bGxvY19vYmplY3QoVGltZUxpbmVIaXN0b3J5RW50cnkpOworCQkvKgorCQkgKiBXZSB1c2Ug cGFsbG9jMF9vYmplY3QgdG8gZW5zdXJlIHRoYXQgdGx1dWlkIGlzIGFsbC16ZXJvLCB3aGlj aCBpcworCQkgKiBpbXBvcnRhbnQgZm9yIHBnX3Jld2luZCB0byBkZXRlY3Qgd2hldGhlciB0 aGUgaGlzdG9yeSBmaWxlIGlzCisJCSAqIG1pc3Npbmcgb3Igbm90LgorCQkgKi8KKwkJZW50 cnkgPSBwYWxsb2MwX29iamVjdChUaW1lTGluZUhpc3RvcnlFbnRyeSk7CiAJCWVudHJ5LT50 bGkgPSB0bGk7CiAJCWVudHJ5LT5iZWdpbiA9IHByZXZlbmQ7CiAJCWVudHJ5LT5lbmQgPSAo KHVpbnQ2NCkgKHN3aXRjaHBvaW50X2hpKSkgPDwgMzIgfCAodWludDY0KSBzd2l0Y2hwb2lu dF9sbzsKIAkJcHJldmVuZCA9IGVudHJ5LT5lbmQ7CiAKKwkJLyoKKwkJICogUGFyc2UgdGhl IG9wdGlvbmFsIFVVSUQgZmllbGQuIE9sZCBoaXN0b3J5IGZpbGVzIGhhdmUgdGhlIHJlYXNv bgorCQkgKiBzdHJpbmcgaW4gZmllbGQgNC4gSXQgaXMgaW4gdGhlb3J5IHBvc3NpYmxlIHRo YXQgdGhlIHJlYXNvbiBzdHJpbmcKKwkJICogc3RhcnRzIHdpdGggYSBVVUlELCBidXQgdGhl IGN1cnJlbnQgdXNhZ2UgZG8gbm90IHN0b3JlIGEgVVVJRC4gVGhpcworCQkgKiBhbGxvd3Mg dXMgdG8gc3VwcG9ydCBib3RoIG9sZCBhbmQgbmV3IGZvcm1hdHMgb2YgaGlzdG9yeSBmaWxl cworCQkgKiB3aXRob3V0IGJyZWFraW5nIGNvbXBhdGliaWxpdHkgYnkgY2hlY2tpbmcgaWYg dGhlIGZpZWxkIGNvbnRhaW5zIGEKKwkJICogdmFsaWQgVVVJRC4KKwkJICovCisJCWlmIChu ZmllbGRzID09IDQgJiYgc3RybGVuKHV1aWRfc3RyKSA9PSBVVUlEX1NUUl9MRU4pCisJCXsK KwkJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0Owor CisJCQlQR19UUlkoKTsKKwkJCXsKKwkJCQlEYXR1bQkJZGF0dW0gPSBEaXJlY3RGdW5jdGlv bkNhbGwxKHV1aWRfaW4sIENTdHJpbmdHZXREYXR1bSh1dWlkX3N0cikpOworCisJCQkJbWVt Y3B5KCZlbnRyeS0+dGx1dWlkLCBEYXR1bUdldFVVSURQKGRhdHVtKSwgc2l6ZW9mKHBnX3V1 aWRfdCkpOworCQkJfQorCQkJUEdfQ0FUQ0goKTsKKwkJCXsKKwkJCQlFcnJvckRhdGEgICpl ZGF0YTsKKworCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJCQll ZGF0YSA9IENvcHlFcnJvckRhdGEoKTsKKwkJCQlGbHVzaEVycm9yU3RhdGUoKTsKKworCQkJ CWVyZXBvcnQoRkFUQUwsCisJCQkJCQllcnJtc2coImludmFsaWQgVVVJRCBpbiBoaXN0b3J5 IGZpbGUgXCIlc1wiIiwgcGF0aCksCisJCQkJCQllcnJkZXRhaWwoIiVzIiwgZWRhdGEtPm1l c3NhZ2UpKTsKKwkJCX0KKwkJCVBHX0VORF9UUlkoKTsKKwkJfQorCiAJCS8qIEJ1aWxkIGxp c3Qgd2l0aCBuZXdlc3QgaXRlbSBmaXJzdCAqLwogCQlyZXN1bHQgPSBsY29ucyhlbnRyeSwg cmVzdWx0KTsKIApAQCAtMTk3LDkgKzI0MywxMSBAQCByZWFkVGltZUxpbmVIaXN0b3J5KFRp bWVMaW5lSUQgdGFyZ2V0VExJKQogCiAJLyoKIAkgKiBDcmVhdGUgb25lIG1vcmUgZW50cnkg Zm9yIHRoZSAidGlwIiBvZiB0aGUgdGltZWxpbmUsIHdoaWNoIGhhcyBubyBlbnRyeQotCSAq IGluIHRoZSBoaXN0b3J5IGZpbGUuCisJICogaW4gdGhlIGhpc3RvcnkgZmlsZS4gV2UgdXNl IHBhbGxvYzBfb2JqZWN0IHRvIGVuc3VyZSB0aGF0IHRsdXVpZCBpcworCSAqIGFsbC16ZXJv LCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHBnX3Jld2luZCB0byBkZXRlY3Qgd2hldGhlciB0 aGUKKwkgKiBoaXN0b3J5IGZpbGUgaXMgbWlzc2luZyBvciBub3QuCiAJICovCi0JZW50cnkg PSBwYWxsb2Nfb2JqZWN0KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKKwllbnRyeSA9IHBhbGxv YzBfb2JqZWN0KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKIAllbnRyeS0+dGxpID0gdGFyZ2V0 VExJOwogCWVudHJ5LT5iZWdpbiA9IHByZXZlbmQ7CiAJZW50cnktPmVuZCA9IEludmFsaWRY TG9nUmVjUHRyOwpAQCAtMjk0LDIxICszNDIsMzMgQEAgZmluZE5ld2VzdFRpbWVMaW5lKFRp bWVMaW5lSUQgc3RhcnRUTEkpCiAgKgogICoJbmV3VExJOiBJRCBvZiB0aGUgbmV3IHRpbWVs aW5lCiAgKglwYXJlbnRUTEk6IElEIG9mIGl0cyBpbW1lZGlhdGUgcGFyZW50CisgKgluZXdU TFVVSUQ6IFVVSUQgdW5pcXVlbHkgaWRlbnRpZnlpbmcgdGhpcyBwcm9tb3Rpb24gaW5zdGFu Y2UKICAqCXN3aXRjaHBvaW50OiBXQUwgbG9jYXRpb24gd2hlcmUgdGhlIHN5c3RlbSBzd2l0 Y2hlZCB0byB0aGUgbmV3IHRpbWVsaW5lCiAgKglyZWFzb246IGh1bWFuLXJlYWRhYmxlIGV4 cGxhbmF0aW9uIG9mIHdoeSB0aGUgdGltZWxpbmUgd2FzIHN3aXRjaGVkCiAgKgotICogQ3Vy cmVudGx5IHRoaXMgaXMgb25seSB1c2VkIGF0IHRoZSBlbmQgcmVjb3ZlcnksIGFuZCBzbyB0 aGVyZSBhcmUgbm8gbG9ja2luZworICogVGhlIG91dHB1dCBmaWxlIGlzIG5hbWVkIDxuZXdU TEk+Lmhpc3RvcnkgKGUuZy4gMDAwMDAwMDMuaGlzdG9yeSkuICBJZiB0d28KKyAqIHNlcnZl cnMgaW5kZXBlbmRlbnRseSBwcm9tb3RlIHRvIHRoZSBzYW1lIHRpbWVsaW5lIElELCB0aGVp ciBoaXN0b3J5IGZpbGVzCisgKiBzaGFyZSB0aGUgc2FtZSBuYW1lLiBJbiBhIHNoYXJlZCBX QUwgYXJjaGl2ZSB0aGUgc2Vjb25kIGZpbGUgdG8gYXJyaXZlCisgKiBzaWxlbnRseSBvdmVy d3JpdGVzIHRoZSBmaXJzdC4gIFRoZSBuZXdUTFVVSUQgd3JpdHRlbiBpbnRvIHRoZSBmaWxl IGNvbnRlbnQKKyAqIGxldHMgcGdfcmV3aW5kIGRldGVjdCB0aGlzIGNvbGxpc2lvbjogaXQg ZmV0Y2hlcyBlYWNoIHNlcnZlcidzIGhpc3RvcnkgZmlsZQorICogZGlyZWN0bHkgZnJvbSB0 aGF0IHNlcnZlciwgY29tcGFyZXMgdGhlIFVVSURzIGZvciBldmVyeSBzaGFyZWQgVExJLCBh bmQKKyAqIHRyZWF0cyBhIFVVSUQgbWlzbWF0Y2ggYXMgZXZpZGVuY2Ugb2YgaW5kZXBlbmRl bnQgcHJvbW90aW9uIGV2ZW4gd2hlbiB0aGUKKyAqIFRMSSBudW1iZXJzIGFncmVlLgorICoK KyAqIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCBhdCBlbmQgb2YgcmVjb3ZlcnksIGFu ZCBzbyB0aGVyZSBhcmUgbm8gbG9ja2luZwogICogY29uc2lkZXJhdGlvbnMuICBCdXQgd2Ug c2hvdWxkIGJlIGp1c3QgYXMgdGVuc2UgYXMgWExvZ0ZpbGVJbml0IHRvIGF2b2lkCiAgKiBl bXBsYWNpbmcgYSBib2d1cyBmaWxlLgogICovCiB2b2lkCiB3cml0ZVRpbWVMaW5lSGlzdG9y eShUaW1lTGluZUlEIG5ld1RMSSwgVGltZUxpbmVJRCBwYXJlbnRUTEksCisJCQkJCSBjb25z dCBwZ191dWlkX3QgKm5ld1RMVVVJRCwKIAkJCQkJIFhMb2dSZWNQdHIgc3dpdGNocG9pbnQs IGNvbnN0IGNoYXIgKnJlYXNvbikKIHsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CiAJY2hh cgkJdG1wcGF0aFtNQVhQR1BBVEhdOwogCWNoYXIJCWhpc3RmbmFtZVtNQVhGTkFNRUxFTl07 CiAJY2hhcgkJYnVmZmVyW0JMQ0tTWl07CisJY2hhcgkgICAqdXVpZF9zdHI7CiAJaW50CQkJ c3JjZmQ7CiAJaW50CQkJZmQ7CiAJc3NpemVfdAkJbmJ5dGVzOwpAQCAtMzk4LDEzICs0NTgs MTkgQEAgd3JpdGVUaW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCBuZXdUTEksIFRpbWVMaW5l SUQgcGFyZW50VExJLAogCSAqCiAJICogSWYgd2UgZGlkIGhhdmUgYSBwYXJlbnQgZmlsZSwg aW5zZXJ0IGFuIGV4dHJhIG5ld2xpbmUganVzdCBpbiBjYXNlIHRoZQogCSAqIHBhcmVudCBm aWxlIGZhaWxlZCB0byBlbmQgd2l0aCBvbmUuCisJICoKKwkgKiBGb3JtYXQ6IDxwYXJlbnRU TEk+XHQ8c3dpdGNocG9pbnQ+XHQ8VGhpc1RpbWVMaW5lVVVJRD5cdDxyZWFzb24+XG4KIAkg Ki8KKwl1dWlkX3N0ciA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKHV1 aWRfb3V0LCBVVUlEUEdldERhdHVtKG5ld1RMVVVJRCkpKTsKKwogCXNucHJpbnRmKGJ1ZmZl ciwgc2l6ZW9mKGJ1ZmZlciksCi0JCQkgIiVzJXVcdCVYLyUwOFhcdCVzXG4iLAorCQkJICIl cyV1XHQlWC8lMDhYXHQlc1x0JXNcbiIsCiAJCQkgKHNyY2ZkIDwgMCkgPyAiIiA6ICJcbiIs CiAJCQkgcGFyZW50VExJLAogCQkJIExTTl9GT1JNQVRfQVJHUyhzd2l0Y2hwb2ludCksCisJ CQkgdXVpZF9zdHIsCiAJCQkgcmVhc29uKTsKKwlwZnJlZSh1dWlkX3N0cik7CiAKIAluYnl0 ZXMgPSBzdHJsZW4oYnVmZmVyKTsKIAllcnJubyA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMKaW5kZXggOWVjMGJlNzdjYTAuLmFhNGU1YWRkODI1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jCkBAIC05OSw2ICs5OSw3IEBACiAjaW5jbHVkZSAic3RvcmFn ZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zeW5jLmgiCiAjaW5jbHVkZSAi dXRpbHMvZ3VjX2hvb2tzLmgiCisjaW5jbHVkZSAidXRpbHMvdXVpZC5oIgogI2luY2x1ZGUg InV0aWxzL2d1Y190YWJsZXMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQu aCIKICNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKQEAgLTY2NDQsNiArNjY0 NSw5IEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJbmV3VExJID0gZW5kT2ZSZWNvdmVyeUluZm8t Pmxhc3RSZWNUTEk7CiAJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKIAl7CisJCXN0 cnVjdCB0aW1ldmFsIHR2OworCQlwZ191dWlkX3QJdXVpZF9idWY7CisKIAkJbmV3VExJID0g ZmluZE5ld2VzdFRpbWVMaW5lKHJlY292ZXJ5VGFyZ2V0VExJKSArIDE7CiAJCWVyZXBvcnQo TE9HLAogCQkJCShlcnJtc2coInNlbGVjdGVkIG5ldyB0aW1lbGluZSBJRDogJXUiLCBuZXdU TEkpKSk7CkBAIC02Njc0LDggKzY2NzgsMTkgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJICog dG8gdGhlIG5ldyB0aW1lbGluZSwgYW5kIHdpbGwgdHJ5IHRvIGNvbm5lY3QgdG8gdGhlIG5l dyB0aW1lbGluZS4KIAkJICogVG8gbWluaW1pemUgdGhlIHdpbmRvdyBmb3IgdGhhdCwgdHJ5 IHRvIGRvIGFzIGxpdHRsZSBhcyBwb3NzaWJsZQogCQkgKiBiZXR3ZWVuIGhlcmUgYW5kIHdy aXRpbmcgdGhlIGVuZC1vZi1yZWNvdmVyeSByZWNvcmQuCisJCSAqCisJCSAqIEdlbmVyYXRl IGEgVVVJRHY3IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIHByb21vdGlvbi4gIFRo ZQorCQkgKiBzYW1lIFVVSUQgaXMgd3JpdHRlbiBpbnRvIHRoZSBoaXN0b3J5IGZpbGUgc28g dGhhdCBwZ19yZXdpbmQgY2FuCisJCSAqIGRpc3Rpbmd1aXNoIHR3byBzZXJ2ZXJzIHRoYXQg aW5kZXBlbmRlbnRseSBwcm9tb3RlZCB0byB0aGUgc2FtZQorCQkgKiB0aW1lbGluZSBJRC4g IFVzZSBnZXR0aW1lb2ZkYXkoKSBzaW5jZSB3ZSBhcmUgbm90IG9uIGEgaG90IHBhdGg7CisJ CSAqIGdlbmVyYXRlX3V1aWR2NyB3YW50cyBtaWxsaXNlY29uZHMgYW5kIHdlIHBhc3MgMCBm b3Igc3ViLW1zIHNpbmNlCisJCSAqIHRoZSByYW5kb20gYml0cyBhbHJlYWR5IGRpc3Rpbmd1 aXNoIFVVSURzIGdlbmVyYXRlZCB3aXRoaW4gdGhlIHNhbWUKKwkJICogbWlsbGlzZWNvbmQu CiAJCSAqLworCQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwkJZ2VuZXJhdGVfdXVpZHY3 X3IoJnV1aWRfYnVmLCB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDAsIDAp OwogCQl3cml0ZVRpbWVMaW5lSGlzdG9yeShuZXdUTEksIHJlY292ZXJ5VGFyZ2V0VExJLAor CQkJCQkJCSAmdXVpZF9idWYsCiAJCQkJCQkJIEVuZE9mTG9nLCBlbmRPZlJlY292ZXJ5SW5m by0+cmVjb3ZlcnlTdG9wUmVhc29uKTsKIAogCQllcmVwb3J0KExPRywKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC91dWlkLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv dXVpZC5jCmluZGV4IGMwMTllMTdmMjFiLi5hNmMwMTBkY2E5YiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3V1aWQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv dXVpZC5jCkBAIC05MSw3ICs5MSw3IEBAIHN0YXRpYyBib29sIHV1aWRfYWJicmV2X2Fib3J0 KGludCBtZW10dXBjb3VudCwgU29ydFN1cHBvcnQgc3N1cCk7CiBzdGF0aWMgRGF0dW0gdXVp ZF9hYmJyZXZfY29udmVydChEYXR1bSBvcmlnaW5hbCwgU29ydFN1cHBvcnQgc3N1cCk7CiBz dGF0aWMgaW5saW5lIHZvaWQgdXVpZF9zZXRfdmVyc2lvbihwZ191dWlkX3QgKnV1aWQsIHVu c2lnbmVkIGNoYXIgdmVyc2lvbik7CiBzdGF0aWMgaW5saW5lIGludDY0IGdldF9yZWFsX3Rp bWVfbnNfYXNjZW5kaW5nKHZvaWQpOwotc3RhdGljIHBnX3V1aWRfdCAqZ2VuZXJhdGVfdXVp ZHY3KHVpbnQ2NCB1bml4X3RzX21zLCB1aW50MzIgc3ViX21zKTsKK3BnX3V1aWRfdCAgKmdl bmVyYXRlX3V1aWR2Nyh1aW50NjQgdW5peF90c19tcywgdWludDMyIHN1Yl9tcyk7CiAKIERh dHVtCiB1dWlkX2luKFBHX0ZVTkNUSU9OX0FSR1MpCkBAIC03MDcsNiArNzA3LDE0IEBAIGdl dF9yZWFsX3RpbWVfbnNfYXNjZW5kaW5nKHZvaWQpCiAJcmV0dXJuIG5zOwogfQogCitwZ191 dWlkX3QgKgorZ2VuZXJhdGVfdXVpZHY3KHVpbnQ2NCB1bml4X3RzX21zLCB1aW50MzIgc3Vi X21zKQoreworCXBnX3V1aWRfdCAgKnV1aWQgPSBwYWxsb2MoVVVJRF9MRU4pOworCisJcmV0 dXJuIGdlbmVyYXRlX3V1aWR2N19yKHV1aWQsIHVuaXhfdHNfbXMsIHN1Yl9tcyk7Cit9CisK IC8qCiAgKiBHZW5lcmF0ZSBVVUlEIHZlcnNpb24gNyBwZXIgUkZDIDk1NjIsIHdpdGggdGhl IGdpdmVuIHRpbWVzdGFtcC4KICAqCkBAIC03MjMsMTAgKzczMSw5IEBAIGdldF9yZWFsX3Rp bWVfbnNfYXNjZW5kaW5nKHZvaWQpCiAgKgogICogTkI6IGFsbCBudW1iZXJzIGhlcmUgYXJl IHVuc2lnbmVkLCB1bml4X3RzX21zIGNhbm5vdCBiZSBuZWdhdGl2ZSBwZXIgUkZDLgogICov Ci1zdGF0aWMgcGdfdXVpZF90ICoKLWdlbmVyYXRlX3V1aWR2Nyh1aW50NjQgdW5peF90c19t cywgdWludDMyIHN1Yl9tcykKK3BnX3V1aWRfdCAqCitnZW5lcmF0ZV91dWlkdjdfcihwZ191 dWlkX3QgKnV1aWQsIHVpbnQ2NCB1bml4X3RzX21zLCB1aW50MzIgc3ViX21zKQogewotCXBn X3V1aWRfdCAgKnV1aWQgPSBwYWxsb2MoVVVJRF9MRU4pOwogCXVpbnQzMgkJaW5jcmVhc2Vk X2Nsb2NrX3ByZWNpc2lvbjsKIAogCS8qIEZpbGwgaW4gdGltZSBwYXJ0ICovCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX3Jld2luZC9wZ19yZXdpbmQuYyBiL3NyYy9iaW4vcGdfcmV3aW5k L3BnX3Jld2luZC5jCmluZGV4IGQyNTIxZGFiMzMzLi4zYzA4N2Y1NTI1MCAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3aW5kLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXdp bmQvcGdfcmV3aW5kLmMKQEAgLTMyLDYgKzMyLDE5IEBACiAjaW5jbHVkZSAicmV3aW5kX3Nv dXJjZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgogCisvKgorICogVGltZWxp bmUgaGlzdG9yaWVzIGZvciBib3RoIGNsdXN0ZXJzLCBwb3B1bGF0ZWQgYnkgbWF0Y2hBbmRG ZXRjaFRpbWVsaW5lcygpLgorICovCit0eXBlZGVmIHN0cnVjdCBUaW1lTGluZUhpc3Rvcmll c0RhdGEKK3sKKwlUaW1lTGluZUhpc3RvcnlFbnRyeSAqc291cmNlLAorCQkJICAgKnRhcmdl dDsKKwlpbnQJCQlzb3VyY2VOZW50cmllcywKKwkJCQl0YXJnZXROZW50cmllczsKK30JCQlU aW1lTGluZUhpc3Rvcmllc0RhdGE7CisKK3R5cGVkZWYgVGltZUxpbmVIaXN0b3JpZXNEYXRh ICogVGltZUxpbmVIaXN0b3JpZXM7CisKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKTsKIAogc3RhdGljIHZvaWQgcGVyZm9ybV9yZXdpbmQoZmlsZW1hcF90ICpm aWxlbWFwLCByZXdpbmRfc291cmNlICpzb3VyY2UsCkBAIC01NCw2ICs2Nyw5IEBAIHN0YXRp YyB2b2lkIGZpbmRDb21tb25BbmNlc3RvclRpbWVsaW5lKFRpbWVMaW5lSGlzdG9yeUVudHJ5 ICphX2hpc3RvcnksCiAJCQkJCQkJCQkgICBUaW1lTGluZUhpc3RvcnlFbnRyeSAqYl9oaXN0 b3J5LAogCQkJCQkJCQkJICAgaW50IGJfbmVudHJpZXMsCiAJCQkJCQkJCQkgICBYTG9nUmVj UHRyICpyZWNwdHIsIGludCAqdGxpSW5kZXgpOworc3RhdGljIGlubGluZSBib29sIG1hdGNo aW5nVGltZWxpbmVVVUlEKFRpbWVMaW5lSGlzdG9yeUVudHJ5ICphLCBUaW1lTGluZUhpc3Rv cnlFbnRyeSAqYik7CitzdGF0aWMgYm9vbCBtYXRjaEFuZEZldGNoVGltZWxpbmVzKFRpbWVM aW5lSUQgc291cmNlX3RsaSwgVGltZUxpbmVJRCB0YXJnZXRfdGxpLAorCQkJCQkJCQkgICBU aW1lTGluZUhpc3RvcmllcyB0aW1lbGluZUhpc3Rvcmllcyk7CiBzdGF0aWMgdm9pZCBlbnN1 cmVDbGVhblNodXRkb3duKGNvbnN0IGNoYXIgKmFyZ3YwKTsKIHN0YXRpYyB2b2lkIGRpc2Nv bm5lY3RfYXRleGl0KHZvaWQpOwogCkBAIC0xNDIsNiArMTU4LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJaW50CQkJYzsKIAlYTG9nUmVjUHRyCWRpdmVyZ2VyZWM7CiAJ aW50CQkJbGFzdGNvbW1vbnRsaUluZGV4OworCVRpbWVMaW5lSGlzdG9yaWVzRGF0YSB0aW1l bGluZUhpc3RvcmllczsKIAlYTG9nUmVjUHRyCWNoa3B0cmVjOwogCVRpbWVMaW5lSUQJY2hr cHR0bGk7CiAJWExvZ1JlY1B0cgljaGtwdHJlZG87CkBAIC0zNzYsMTAgKzM5MywyMSBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKgogCSAqIElmIGJvdGggY2x1c3RlcnMg YXJlIGFscmVhZHkgb24gdGhlIHNhbWUgdGltZWxpbmUsIHRoZXJlJ3Mgbm90aGluZyB0bwog CSAqIGRvLgorCSAqCisJICogVGhpcyBhbHNvIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiB0d28g c2VydmVycyBpbmRlcGVuZGVudGx5IHByb21vdGVkIHRvCisJICogdGhlIHNhbWUgdGltZWxp bmUgSUQ6IG9uZSBjcmFzaGVkIGFmdGVyIHdyaXRpbmcgdGhlIGhpc3RvcnkgZmlsZSBidXQK KwkgKiBiZWZvcmUgaXRzIEVPUiBXQUwgcmVjb3JkIHdhcyBkaXN0cmlidXRlZCwgc28gYSBz ZWNvbmQgc3RhbmRieSBwcm9tb3RlZAorCSAqIGluZGVwZW5kZW50bHkuICBUaGUgaGlzdG9y eSBmaWxlcyBwcm9kdWNlZCBieSB0aG9zZSB0d28gcHJvbW90aW9ucworCSAqIGNhcnJ5IGRp ZmZlcmVudCBVVUlEcy4KKwkgKgorCSAqIFdoZW4gdGhlIGNsdXN0ZXJzIGFyZSBvbiBkaWZm ZXJlbnQgdGltZWxpbmVzIHdlIGxvY2F0ZSB0aGUgZm9yayBwb2ludAorCSAqIHZpYSBmaW5k Q29tbW9uQW5jZXN0b3JUaW1lbGluZS4KIAkgKi8KLQlpZiAodGFyZ2V0X3RsaSA9PSBzb3Vy Y2VfdGxpKQorCWlmIChtYXRjaEFuZEZldGNoVGltZWxpbmVzKHNvdXJjZV90bGksIHRhcmdl dF90bGksICZ0aW1lbGluZUhpc3RvcmllcykpCiAJewogCQlwZ19sb2dfaW5mbygic291cmNl IGFuZCB0YXJnZXQgY2x1c3RlciBhcmUgb24gdGhlIHNhbWUgdGltZWxpbmUiKTsKKwkJcGZy ZWUodGltZWxpbmVIaXN0b3JpZXMuc291cmNlKTsKKwkJcGZyZWUodGltZWxpbmVIaXN0b3Jp ZXMudGFyZ2V0KTsKIAkJcmV3aW5kX25lZWRlZCA9IGZhbHNlOwogCQl0YXJnZXRfd2FsX2Vu ZHJlYyA9IEludmFsaWRYTG9nUmVjUHRyOwogCX0KQEAgLTM5Myw4ICs0MjEsMTAgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCSAqIFJldHJpZXZlIHRpbWVsaW5lcyBmb3Ig Ym90aCBzb3VyY2UgYW5kIHRhcmdldCwgYW5kIGZpbmQgdGhlIHBvaW50CiAJCSAqIHdoZXJl IHRoZXkgZGl2ZXJnZWQuCiAJCSAqLwotCQlzb3VyY2VIaXN0b3J5ID0gZ2V0VGltZWxpbmVI aXN0b3J5KHNvdXJjZV90bGksIHRydWUsICZzb3VyY2VOZW50cmllcyk7Ci0JCXRhcmdldEhp c3RvcnkgPSBnZXRUaW1lbGluZUhpc3RvcnkodGFyZ2V0X3RsaSwgZmFsc2UsICZ0YXJnZXRO ZW50cmllcyk7CisJCXRhcmdldEhpc3RvcnkgPSB0aW1lbGluZUhpc3Rvcmllcy50YXJnZXQ7 CisJCXRhcmdldE5lbnRyaWVzID0gdGltZWxpbmVIaXN0b3JpZXMudGFyZ2V0TmVudHJpZXM7 CisJCXNvdXJjZUhpc3RvcnkgPSB0aW1lbGluZUhpc3Rvcmllcy5zb3VyY2U7CisJCXNvdXJj ZU5lbnRyaWVzID0gdGltZWxpbmVIaXN0b3JpZXMuc291cmNlTmVudHJpZXM7CiAKIAkJZmlu ZENvbW1vbkFuY2VzdG9yVGltZWxpbmUoc291cmNlSGlzdG9yeSwgc291cmNlTmVudHJpZXMs CiAJCQkJCQkJCSAgIHRhcmdldEhpc3RvcnksIHRhcmdldE5lbnRyaWVzLApAQCAtOTgyLDQw ICsxMDEyLDY5IEBAIE1pblhMb2dSZWNQdHIoWExvZ1JlY1B0ciBhLCBYTG9nUmVjUHRyIGIp CiAJCXJldHVybiBNaW4oYSwgYik7CiB9CiAKK3N0YXRpYyBib29sCitmaWxlX2V4aXN0cyhj b25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJQXNzZXJ0KG5hbWUg IT0gTlVMTCk7CisKKwlpZiAoc3RhdChuYW1lLCAmc3QpID09IDApCisJCXJldHVybiAhU19J U0RJUihzdC5zdF9tb2RlKTsKKwllbHNlIGlmICghKGVycm5vID09IEVOT0VOVCB8fCBlcnJu byA9PSBFTk9URElSIHx8IGVycm5vID09IEVBQ0NFUykpCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgc3RhdCBmaWxlIFwiJXNcIjogJW0iLCBuYW1lKTsKKworCXJldHVybiBmYWxzZTsKKwor fQorCiAvKgogICogUmV0cmlldmUgdGltZWxpbmUgaGlzdG9yeSBmb3IgdGhlIHNvdXJjZSBv ciB0YXJnZXQgc3lzdGVtLgogICovCiBzdGF0aWMgVGltZUxpbmVIaXN0b3J5RW50cnkgKgog Z2V0VGltZWxpbmVIaXN0b3J5KFRpbWVMaW5lSUQgdGxpLCBib29sIGlzX3NvdXJjZSwgaW50 ICpuZW50cmllcykKIHsKLQlUaW1lTGluZUhpc3RvcnlFbnRyeSAqaGlzdG9yeTsKKwlUaW1l TGluZUhpc3RvcnlFbnRyeSAqaGlzdG9yeSA9IE5VTEw7CiAKIAkvKgogCSAqIFRpbWVsaW5l IDEgZG9lcyBub3QgaGF2ZSBhIGhpc3RvcnkgZmlsZSwgc28gdGhlcmUgaXMgbm8gbmVlZCB0 byBjaGVjawogCSAqIGFuZCBmYWtlIGFuIGVudHJ5IHdpdGggaW5maW5pdGUgc3RhcnQgYW5k IGVuZCBwb3NpdGlvbnMuCiAJICovCi0JaWYgKHRsaSA9PSAxKQotCXsKLQkJaGlzdG9yeSA9 IHBnX21hbGxvY19vYmplY3QoVGltZUxpbmVIaXN0b3J5RW50cnkpOwotCQloaXN0b3J5LT50 bGkgPSB0bGk7Ci0JCWhpc3RvcnktPmJlZ2luID0gaGlzdG9yeS0+ZW5kID0gSW52YWxpZFhM b2dSZWNQdHI7Ci0JCSpuZW50cmllcyA9IDE7Ci0JfQotCWVsc2UKKwlpZiAodGxpICE9IDEp CiAJewogCQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0JCWNoYXIJICAgKmhpc3RmaWxlOwor CQljaGFyCSAgICpoaXN0ZmlsZSA9IE5VTEw7CiAKIAkJVExIaXN0b3J5RmlsZVBhdGgocGF0 aCwgdGxpKTsKIAotCQkvKiBHZXQgaGlzdG9yeSBmaWxlIGZyb20gYXBwcm9wcmlhdGUgc291 cmNlICovCisJCS8qIEdldCBoaXN0b3J5IGZpbGUgZnJvbSBhcHByb3ByaWF0ZSBzb3VyY2Us IHRvbGVyYXRpbmcgaXRzIGFic2VuY2UgKi8KIAkJaWYgKGlzX3NvdXJjZSkKIAkJCWhpc3Rm aWxlID0gc291cmNlLT5mZXRjaF9maWxlKHNvdXJjZSwgcGF0aCwgTlVMTCk7CiAJCWVsc2UK LQkJCWhpc3RmaWxlID0gc2x1cnBGaWxlKGRhdGFkaXJfdGFyZ2V0LCBwYXRoLCBOVUxMKTsK KwkJeworCQkJY2hhcgkJZnVsbHBhdGhbTUFYUEdQQVRIXTsKKworCQkJc25wcmludGYoZnVs bHBhdGgsIHNpemVvZihmdWxscGF0aCksICIlcy8lcyIsIGRhdGFkaXJfdGFyZ2V0LCBwYXRo KTsKKwkJCWlmIChmaWxlX2V4aXN0cyhmdWxscGF0aCkpCisJCQkJaGlzdGZpbGUgPSBzbHVy cEZpbGUoZGF0YWRpcl90YXJnZXQsIHBhdGgsIE5VTEwpOworCQl9CisKKwkJaWYgKGhpc3Rm aWxlICE9IE5VTEwpCisJCXsKKwkJCWhpc3RvcnkgPSByZXdpbmRfcGFyc2VUaW1lTGluZUhp c3RvcnkoaGlzdGZpbGUsIHRsaSwgbmVudHJpZXMpOworCQkJcGdfZnJlZShoaXN0ZmlsZSk7 CisJCX0KKwl9CiAKLQkJaGlzdG9yeSA9IHJld2luZF9wYXJzZVRpbWVMaW5lSGlzdG9yeSho aXN0ZmlsZSwgdGxpLCBuZW50cmllcyk7Ci0JCXBnX2ZyZWUoaGlzdGZpbGUpOworCS8qCisJ ICogSWYgbm8gaGlzdG9yeSBmaWxlIGVudHJ5IHdhcyBjcmVhdGVkLCB3ZSBjcmVhdGUgYSAi emVybyIgZW50cnkuCisJICovCisJaWYgKGhpc3RvcnkgPT0gTlVMTCkKKwl7CisJCWhpc3Rv cnkgPSBwZ19tYWxsb2MwX29iamVjdChUaW1lTGluZUhpc3RvcnlFbnRyeSk7CisJCWhpc3Rv cnktPnRsaSA9IHRsaTsKKwkJaGlzdG9yeS0+YmVnaW4gPSBoaXN0b3J5LT5lbmQgPSBJbnZh bGlkWExvZ1JlY1B0cjsKKwkJKm5lbnRyaWVzID0gMTsKIAl9CiAKIAkvKiBJbiBkZWJ1Z2dp bmcgbW9kZSwgcHJpbnQgd2hhdCB3ZSByZWFkICovCkBAIC0xMDQyLDYgKzExMDEsNTYgQEAg Z2V0VGltZWxpbmVIaXN0b3J5KFRpbWVMaW5lSUQgdGxpLCBib29sIGlzX3NvdXJjZSwgaW50 ICpuZW50cmllcykKIAlyZXR1cm4gaGlzdG9yeTsKIH0KIAorLyoKKyAqIFJldHVybiB0cnVl IGlmIHR3byBwZXItZW50cnkgcHJvbW90aW9uIFVVSURzIGFyZSBjb21wYXRpYmxlLgorICoK KyAqIEEgemVybyBVVUlEIG1lYW5zIHRoZSBoaXN0b3J5IGZpbGUgcHJlZGF0ZXMgdGhpcyBm aXggKG9yIHRoZSBlbnRyeSBpcworICogc3ludGhldGljKS4gIElmIGJvdGggc2lkZXMgYXJl IHplcm8gd2UgaGF2ZSBubyBVVUlEIGluZm9ybWF0aW9uIGFuZCBmYWxsCisgKiBiYWNrIHRv IFRMSS1udW1iZXItb25seSBtYXRjaGluZyAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRo IG9sZCBzZXJ2ZXJzKS4KKyAqIElmIG9uZSBzaWRlIGNhcnJpZXMgYSBVVUlEIGFuZCB0aGUg b3RoZXIgZG9lcyBub3QsIHRoZXkgY2Fubm90IG9yaWdpbmF0ZQorICogZnJvbSB0aGUgc2Ft ZSBwcm9tb3Rpb24gYW5kIGFyZSB0cmVhdGVkIGFzIGluY29tcGF0aWJsZS4KKyAqLworc3Rh dGljIGlubGluZSBib29sCittYXRjaGluZ1RpbWVsaW5lVVVJRChUaW1lTGluZUhpc3RvcnlF bnRyeSAqYSwgVGltZUxpbmVIaXN0b3J5RW50cnkgKmIpCit7CisJc3RhdGljIGNvbnN0IHBn X3V1aWRfdCB6ZXJvID0ge3swfX07CisKKwlpZiAobWVtY21wKCZhLT50bHV1aWQsICZ6ZXJv LCBVVUlEX0xFTikgPT0gMCAmJiBtZW1jbXAoJmItPnRsdXVpZCwgJnplcm8sIFVVSURfTEVO KSA9PSAwKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbWVtY21wKCZhLT50bHV1aWQsICZi LT50bHV1aWQsIFVVSURfTEVOKSA9PSAwOworfQorCisvKgorICogRmV0Y2ggdGhlIHRpbWVs aW5lIGhpc3RvcnkgZm9yIGJvdGggY2x1c3RlcnMsIHN0b3JlIHRoZW0gaW4gdGxoLCBhbmQg cmV0dXJuCisgKiB0cnVlIGlmIHRoZSBjbHVzdGVycyBhcmUgb24gdGhlIHNhbWUgdGltZWxp bmUgKG5vIHJld2luZCBuZWVkZWQpLgorICoKKyAqIHRsaCBpcyBhbHdheXMgZnVsbHkgcG9w dWxhdGVkIG9uIHJldHVybiByZWdhcmRsZXNzIG9mIHRoZSByZXN1bHQsIHNvIHRoZQorICog Y2FsbGVyIGNhbiBwYXNzIHRsaC0+c291cmNlIC8gdGxoLT50YXJnZXQgZGlyZWN0bHkgdG8K KyAqIGZpbmRDb21tb25BbmNlc3RvclRpbWVsaW5lKCkgd2hlbiB0aGUgcmV0dXJuIHZhbHVl IGlzIGZhbHNlLgorICoKKyAqIFRMSSAxIGFsd2F5cyByZXR1cm5zIHRydWU6IGl0IGlzIHRo ZSBvcmlnaW5hbCB0aW1lbGluZSBhbmQgaGFzIG5vIHByb21vdGlvbgorICogVVVJRC4gIEZv ciBUTEkgPj0gMiwgdGhlIFVVSUQgaW4gZW50cnlbTmVudHJpZXMgLSAyXSBpZGVudGlmaWVz IHRoZQorICogcHJvbW90aW9uIHRoYXQgY3JlYXRlZCB0aGUgY3VycmVudCBUTEkuICBCb3Ro LXplcm8gVVVJRHMgKG9sZCBoaXN0b3J5IGZpbGVzKQorICogYXJlIHRyZWF0ZWQgYXMgY29t cGF0aWJsZTsgemVyby12cy1ub256ZXJvIGlzIHRyZWF0ZWQgYXMgYSBtaXNtYXRjaCBiZWNh dXNlCisgKiBvbmUgc2lkZSBjYXJyaWVzIGEgcHJvbW90aW9uIFVVSUQgYW5kIHRoZXkgY2Fu bm90IGJlIHRoZSBzYW1lIHByb21vdGlvbi4KKyAqLworc3RhdGljIGJvb2wKK21hdGNoQW5k RmV0Y2hUaW1lbGluZXMoVGltZUxpbmVJRCBzb3VyY2VfdGxpLCBUaW1lTGluZUlEIHRhcmdl dF90bGksIFRpbWVMaW5lSGlzdG9yaWVzIHRsaCkKK3sKKwl0bGgtPnNvdXJjZSA9IGdldFRp bWVsaW5lSGlzdG9yeShzb3VyY2VfdGxpLCB0cnVlLCAmdGxoLT5zb3VyY2VOZW50cmllcyk7 CisJdGxoLT50YXJnZXQgPSBnZXRUaW1lbGluZUhpc3RvcnkodGFyZ2V0X3RsaSwgZmFsc2Us ICZ0bGgtPnRhcmdldE5lbnRyaWVzKTsKKworCWlmIChzb3VyY2VfdGxpICE9IHRhcmdldF90 bGkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFRMSSAxIGhhcyBubyBwcm9tb3Rpb24gVVVJ RDsgYWx3YXlzIHRyZWF0IGFzIHRoZSBzYW1lIHRpbWVsaW5lLiAqLworCWlmICh0bGgtPnNv dXJjZU5lbnRyaWVzIDwgMiB8fCB0bGgtPnRhcmdldE5lbnRyaWVzIDwgMikKKwkJcmV0dXJu IHRydWU7CisKKwlyZXR1cm4gbWF0Y2hpbmdUaW1lbGluZVVVSUQoJnRsaC0+c291cmNlW3Rs aC0+c291cmNlTmVudHJpZXMgLSAyXSwKKwkJCQkJCQkJJnRsaC0+dGFyZ2V0W3RsaC0+dGFy Z2V0TmVudHJpZXMgLSAyXSk7Cit9CisKIC8qCiAgKiBEZXRlcm1pbmUgdGhlIFRMSSBvZiB0 aGUgbGFzdCBjb21tb24gdGltZWxpbmUgaW4gdGhlIHRpbWVsaW5lIGhpc3Rvcnkgb2YKICAq IHR3byBjbHVzdGVycy4gKnRsaUluZGV4IGlzIHNldCB0byB0aGUgaW5kZXggb2YgbGFzdCBj b21tb24gdGltZWxpbmUgaW4KQEAgLTEwNjMsMTIgKzExNzIsMjYgQEAgZmluZENvbW1vbkFu Y2VzdG9yVGltZWxpbmUoVGltZUxpbmVIaXN0b3J5RW50cnkgKmFfaGlzdG9yeSwgaW50IGFf bmVudHJpZXMsCiAJICogZGVwZW5kaW5nIG9uIHRoZSBoaXN0b3J5IGZpbGVzIHRoYXQgZWFj aCBub2RlIGhhcyBmZXRjaGVkIGluIHByZXZpb3VzCiAJICogcmVjb3ZlcnkgcHJvY2Vzc2Vz LiBIZW5jZSBjaGVjayB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIG5ldyB0aW1lbGluZQog CSAqIGFzIHdlbGwgYW5kIG1vdmUgZG93biBieSBvbmUgZXh0cmEgdGltZWxpbmUgZW50cnkg aWYgdGhleSBkbyBub3QgbWF0Y2guCisJICoKKwkgKiBXZSBhbHNvIGNvbXBhcmUgdGltZWxp bmUgVVVJRHMgd2hlbiBib3RoIHNpZGVzIGNhcnJ5IG9uZS4gIFR3byBzZXJ2ZXJzCisJICog dGhhdCBpbmRlcGVuZGVudGx5IHByb21vdGVkIHRvIHRoZSBzYW1lIHRpbWVsaW5lIElEIHBy b2R1Y2UgaGlzdG9yeQorCSAqIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSAoZS5nLiAwMDAw MDAwMy5oaXN0b3J5KTsgaW4gYSBzaGFyZWQgV0FMCisJICogYXJjaGl2ZSB0aGUgc2Vjb25k IGZpbGUgc2lsZW50bHkgb3ZlcndyaXRlcyB0aGUgZmlyc3QuICBwZ19yZXdpbmQKKwkgKiBm ZXRjaGVzIGVhY2ggc2VydmVyJ3MgaGlzdG9yeSBmaWxlIGRpcmVjdGx5IGZyb20gdGhhdCBz ZXJ2ZXIsIHNvIGl0CisJICogc2VlcyBib3RoIFVVSURzLgorCSAqCisJICogVGhlIHRpbWVs aW5lIFVVSUQgc3RvcmVkIGluIGhpc3RvcnkgZW50cnlbaV0gaXMgdGhlIFVVSUQgb2YgdGhl CisJICogcHJvbW90aW9uIHRoYXQgY3JlYXRlZCBlbnRyeVtpKzFdLCBpLmUuIHRoZSBVVUlE IG9mIFRMSSBlbnRyeVtpKzFdLnRsaS4KKwkgKiBTbyB0byBjaGVjayB3aGV0aGVyIGVudHJ5 W2ldIGl0c2VsZiByZXByZXNlbnRzIHRoZSBzYW1lIHRpbWVsaW5lIG9uCisJICogYm90aCBz aWRlcyB3ZSBsb29rIGF0IGVudHJ5W2ktMV0udGx1dWlkIChmb3IgaSA+IDApLiAgVExJIDEg KGkgPT0gMCkgaXMKKwkgKiBhbHdheXMgdGhlIHNhbWU6IGl0IGlzIHRoZSBvcmlnaW5hbCB0 aW1lbGluZSBhbmQgaGFzIG5vIHByb21vdGlvbiBVVUlELgogCSAqLwogCW4gPSBNaW4oYV9u ZW50cmllcywgYl9uZW50cmllcyk7CiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykKIAl7CiAJ CWlmIChhX2hpc3RvcnlbaV0udGxpICE9IGJfaGlzdG9yeVtpXS50bGkgfHwKLQkJCWFfaGlz dG9yeVtpXS5iZWdpbiAhPSBiX2hpc3RvcnlbaV0uYmVnaW4pCisJCQlhX2hpc3RvcnlbaV0u YmVnaW4gIT0gYl9oaXN0b3J5W2ldLmJlZ2luIHx8CisJCQkoaSA+IDAgJiYgIW1hdGNoaW5n VGltZWxpbmVVVUlEKCZhX2hpc3RvcnlbaSAtIDFdLCAmYl9oaXN0b3J5W2kgLSAxXSkpKQog CQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC90LzAwNV9z YW1lX3RpbWVsaW5lLnBsIGIvc3JjL2Jpbi9wZ19yZXdpbmQvdC8wMDVfc2FtZV90aW1lbGlu ZS5wbAppbmRleCA5NWE0MGMzYjI3MC4uYjE3OTdmNzg4ODEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfcmV3aW5kL3QvMDA1X3NhbWVfdGltZWxpbmUucGwKKysrIGIvc3JjL2Jpbi9wZ19y ZXdpbmQvdC8wMDVfc2FtZV90aW1lbGluZS5wbApAQCAtNyw2ICs3LDggQEAKICMKIHVzZSBz dHJpY3Q7CiB1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2UgRmlsZTo6Q29weTsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKQEAgLTIxLDQgKzIzLDQ2MSBAQCBSZXdpbmRU ZXN0OjpjcmVhdGVfc3RhbmRieSgpOwogUmV3aW5kVGVzdDo6cnVuX3BnX3Jld2luZCgnbG9j YWwnKTsKIFJld2luZFRlc3Q6OmNsZWFuX3Jld2luZF90ZXN0KCk7CiAKKyMgSGVscGVyIGZ1 bmN0aW9uIHRvIHJ1biBwZ19yZXdpbmQgaW4gbG9jYWwgbW9kZSB3aXRoIHRoZSBnaXZlbiBz b3VyY2UgYW5kCisjIHRhcmdldCBub2RlcyBhbmQgZXh0cmEgYXJndW1lbnRzLgorIworIyBU aGUgdGFyZ2V0IGFuZCBzb3VyY2Ugbm9kZXMgYXJlIHN0b3BwZWQgYmVmb3JlIHRoZSBjYWxs IGFuZCB0aGUgdGFyZ2V0IGlzCisjIHJlc3RhcnRlZCBhZnRlcndhcmQuICBUaGUgdGFyZ2V0 J3MgcG9zdGdyZXNxbC5jb25mIGlzIGNvcGllZCB0byBhIHRlbXBvcmFyeQorIyBsb2NhdGlv biBhbmQgcGFzc2VkIHRvIHBnX3Jld2luZCB3aXRoIC0tY29uZmlnLWZpbGUsIHNvIHRoYXQg cGdfcmV3aW5kIGNhbgorIyB1cGRhdGUgdGhlIHRhcmdldCdzIGNvbmZpZyBmaWxlIGluIHBs YWNlIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZmlsZQorIyBwZXJtaXNzaW9ucy4gIFRoZSB0 ZW1wb3JhcnkgY29uZmlnIGZpbGUgaXMgbW92ZWQgYmFjayB0byB0aGUgdGFyZ2V0J3MgZGF0 YQorIyBkaXJlY3RvcnkgYW5kIHBlcm1pc3Npb25zIGZpeGVkIGFmdGVyIHBnX3Jld2luZCBm aW5pc2hlcy4KKyMKKyMgSWYgdGhlIGxhc3QgZWxlbWVudCBvZiBAZXh0cmFfYXJncyBpcyBh IGNvZGVyZWYsIGl0IGlzIG5vdCBwYXNzZWQgdG8KKyMgcGdfcmV3aW5kOiBpdCBpcyBydW4g YWZ0ZXIgcGdfcmV3aW5kIGZpbmlzaGVzIGJ1dCBiZWZvcmUgdGhlIHRhcmdldCBpcworIyBy ZXN0YXJ0ZWQsIGUuZy4gdG8gdW5kbyBhIHRlc3QncyBvd24gdGFtcGVyaW5nIHdpdGggdGhl IHRhcmdldCdzIGRhdGEKKyMgZGlyZWN0b3J5IHRoYXQgcGdfcmV3aW5kIGl0c2VsZiBkb2Vz bid0IG5lZWQgdG8gYmUgYXdhcmUgb2YuCitzdWIgcmV3aW5kX25vZGUKK3sKKwlteSAoJHRh cmdldCwgJHNvdXJjZSwgJGxhYmVsLCAlb3B0cykgPSBAXzsKKwlteSBAZXh0cmFfYXJnczsK KworCSRzb3VyY2UtPnN0b3A7CisJJHRhcmdldC0+c3RvcDsKKworCXB1c2ggQGV4dHJhX2Fy Z3MsICctLXJlc3RvcmUtdGFyZ2V0LXdhbCcgaWYgJG9wdHN7Jy1yZXN0b3Jld2FsJ307CisK KwlteSAkdHBnZGF0YSA9ICR0YXJnZXQtPmRhdGFfZGlyOworCW15ICR0bXAgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKKwljb3B5KCIkdHBnZGF0YS9wb3N0Z3Jlc3Fs LmNvbmYiLCAiJHRtcC90YXJnZXQtcG9zdGdyZXNxbC5jb25mLnRtcCIpOworCisJY29tbWFu ZF9vaygKKwkJWworCQkJJ3BnX3Jld2luZCcsCisJCQknLS1kZWJ1ZycsCisJCQknLS1zb3Vy Y2UtcGdkYXRhJyA9PiAkc291cmNlLT5kYXRhX2RpciwKKwkJCSctLXRhcmdldC1wZ2RhdGEn ID0+ICR0YXJnZXQtPmRhdGFfZGlyLAorCQkJJy0tbm8tc3luYycsCisJCQknLS1jb25maWct ZmlsZScgPT4gIiR0bXAvdGFyZ2V0LXBvc3RncmVzcWwuY29uZi50bXAiLAorCQkJQGV4dHJh X2FyZ3MsCisJCV0sCisJCSRsYWJlbCk7CisKKwltb3ZlKCIkdG1wL3RhcmdldC1wb3N0Z3Jl c3FsLmNvbmYudG1wIiwgIiR0cGdkYXRhL3Bvc3RncmVzcWwuY29uZiIpOworCWNobW9kKCR0 YXJnZXQtPmdyb3VwX2FjY2VzcygpID8gMDY0MCA6IDA2MDAsICIkdHBnZGF0YS9wb3N0Z3Jl c3FsLmNvbmYiKQorCSAgb3IgQkFJTF9PVVQoInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbnMg Zm9yICR0cGdkYXRhL3Bvc3RncmVzcWwuY29uZiIpOworCisJJHRhcmdldC0+c3RhcnQgdW5s ZXNzICRvcHRzeyctbm9yZXN0YXJ0J307Cit9CisKKyMgUmV3cml0ZSBhIG5vZGUncyBUTEkg aGlzdG9yeSBmaWxlIGluIHRoZSBvbGQgMy1maWVsZCBmb3JtYXQgKG5vIFVVSUQpLCBzbwor IyB0aGF0IHBnX3Jld2luZCBzZWVzIGEgemVybyBVVUlEIGZvciB0aGF0IHNpZGUsIGFzIGlm IHRoZSBub2RlIGhhZCBiZWVuCisjIHByb21vdGVkIGJ5IGEgc2VydmVyIHRoYXQgcHJlZGF0 ZXMgdGhlIFVVSUQgZmVhdHVyZS4KK3N1YiBzdHJpcF90bGlfdXVpZAoreworCW15ICgkbm9k ZSwgJHRsaSkgPSBAXzsKKwlteSAkaGlzdGZpbGUgPSBzcHJpbnRmKCIlcy9wZ193YWwvJTA4 WC5oaXN0b3J5IiwgJG5vZGUtPmRhdGFfZGlyLCAkdGxpKTsKKwlvcGVuKG15ICRmaCwgJzwn LCAkaGlzdGZpbGUpIG9yIGRpZSAiY2Fubm90IG9wZW4gJGhpc3RmaWxlOiAkISI7CisJbXkg QGxpbmVzID0gPCRmaD47CisJY2xvc2UgJGZoOworCW9wZW4oJGZoLCAnPicsICRoaXN0Zmls ZSkgb3IgZGllICJjYW5ub3Qgd3JpdGUgJGhpc3RmaWxlOiAkISI7CisJZm9yIG15ICRsaW5l IChAbGluZXMpCisJeworCQljaG9tcCAkbGluZTsKKwkJbXkgQGYgPSBzcGxpdCgvXHQvLCAk bGluZSwgNCk7CisJCWlmIChAZiA9PSA0KQorCQl7CisKKwkJCSMgRHJvcCB0aGUgVVVJRCBm aWVsZCAoaW5kZXggMik7IGtlZXAgcGFyZW50VExJLCBzd2l0Y2hwb2ludCwgcmVhc29uLgor CQkJcHJpbnQgJGZoIGpvaW4oIlx0IiwgJGZbMF0sICRmWzFdLCAkZlszXSkgLiAiXG4iOwor CQl9CisJCWVsc2UKKwkJeworCQkJcHJpbnQgJGZoICIkbGluZVxuIjsKKwkJfQorCX0KKwlj bG9zZSAkZmg7Cit9CisKKyMgUmVtb3ZlIGEgbm9kZSdzIFRMSSBoaXN0b3J5IGZpbGUgZW50 aXJlbHksIHNpbXVsYXRpbmcgYSBub2RlIHRoYXQgaGFzIG5vIGxvY2FsCisjIHJlY29yZCBv ZiBpdHMgb3duIGN1cnJlbnQtVExJIHByb21vdGlvbiwgZm9yIGV4YW1wbGUsIGJlY2F1c2Ug aXQgc3RhcnRlZAorIyBzdHJlYW1pbmcgYSB0aW1lbGluZSBpdCBuZXZlciBpdHNlbGYgc3dp dGNoZWQgdG8uIFRoaXMgbWVhbnMgdGhhdCBpdCBuZXZlciBoYWQKKyMgYSByZWFzb24gdG8g d3JpdGUgKG9yIGZldGNoKSBhIGxvY2FsIGNvcHkgb2YgdGhhdCBoaXN0b3J5IGZpbGUuICBS ZXR1cm5zIHRoZQorIyByZW1vdmVkIGZpbGUncyBjb250ZW50LCBzbyBpdCBjYW4gYmUgcmVz dG9yZWQgd2l0aCByZXN0b3JlX3RsaV9oaXN0b3J5KCkuCisjCisjIE5vdGUgdGhpcyBzaW11 bGF0aW9uIGlzIGltcGVyZmVjdDogdW5saWtlIGEgbm9kZSB0aGF0IG5ldmVyIGhhZCB0aGF0 IHJlYXNvbiwKKyMgb3VyIG5vZGUgZ2VudWluZWx5IGRpZCBwcm9tb3RlIGFuZCBzbyBzdGls bCBoYXMgdGhlIGVhcmxpZXIgVExJJ3MgcmVhbCBXQUwKKyMgc2VnbWVudHMgb24gZGlzay4g V2l0aG91dCB0aGUgaGlzdG9yeSBmaWxlIGxpbmtpbmcgdGhlbSwgdGhlIHNlcnZlciBpdHNl bGYgY2FuCisjIG5vIGxvbmdlciBtYWtlIHNlbnNlIG9mIGl0cyBvd24gcGdfd2FsIGRpcmVj dG9yeSBhbmQgd2lsbCBmYWlsIHRvIHN0YXJ0IC0tCisjIHJlc3RvcmVfdGxpX2hpc3Rvcnko KSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgcmVzdGFydGluZyB0aGUgbm9kZS4KK3N1YiByZW1v dmVfdGxpX2hpc3RvcnkKK3sKKwlteSAoJG5vZGUsICR0bGkpID0gQF87CisJbXkgJGhpc3Rm aWxlID0gc3ByaW50ZigiJXMvcGdfd2FsLyUwOFguaGlzdG9yeSIsICRub2RlLT5kYXRhX2Rp ciwgJHRsaSk7CisJb3BlbihteSAkZmgsICc8JywgJGhpc3RmaWxlKSBvciBkaWUgImNhbm5v dCBvcGVuICRoaXN0ZmlsZTogJCEiOworCWxvY2FsICQvOworCW15ICRjb250ZW50ID0gPCRm aD47CisJY2xvc2UgJGZoOworCXVubGluaygkaGlzdGZpbGUpIG9yIGRpZSAiY2Fubm90IHJl bW92ZSAkaGlzdGZpbGU6ICQhIjsKKwlyZXR1cm4gJGNvbnRlbnQ7Cit9CisKKyMgUmVzdG9y ZSBhIFRMSSBoaXN0b3J5IGZpbGUgcHJldmlvdXNseSByZW1vdmVkIGJ5IHJlbW92ZV90bGlf aGlzdG9yeSgpLgorc3ViIHJlc3RvcmVfdGxpX2hpc3RvcnkKK3sKKwlteSAoJG5vZGUsICR0 bGksICRjb250ZW50KSA9IEBfOworCW15ICRoaXN0ZmlsZSA9IHNwcmludGYoIiVzL3BnX3dh bC8lMDhYLmhpc3RvcnkiLCAkbm9kZS0+ZGF0YV9kaXIsICR0bGkpOworCW9wZW4obXkgJGZo LCAnPicsICRoaXN0ZmlsZSkgb3IgZGllICJjYW5ub3Qgd3JpdGUgJGhpc3RmaWxlOiAkISI7 CisJcHJpbnQgJGZoICRjb250ZW50OworCWNsb3NlICRmaDsKK30KKworIyBIZWxwZXIgZnVu Y3Rpb24gdG8gY3JlYXRlIGFuIG9yaWdpbiBub2RlIHdpdGggYSB0ZXN0IHRhYmxlIGFuZCBh IHJvdyBjb250YWluaW5nCisjIHRoZSBnaXZlbiBsYWJlbC4gIFRoZSBub2RlIGlzIHN0YXJ0 ZWQgYW5kIHJlYWR5IGZvciB1c2UgYXMgYSBzb3VyY2UgZm9yCisjIHN0YW5kYnlzLgorc3Vi IHNldHVwX29yaWdpbgoreworCW15ICgkbGFiZWwpID0gQF87CisJbXkgJG5vZGUgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJGxhYmVsKTsKKwkkbm9kZS0+aW5pdChhbGxv d3Nfc3RyZWFtaW5nID0+IDEpOworCSRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywgIndhbF9rZWVwX3NpemUgPSAzMjBNQlxuIik7CisJJG5vZGUtPnN0YXJ0OworCSRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0YmwgKHZhbCB0ZXh0 KSIpOworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRibCBW QUxVRVMgKCckbGFiZWwnKSIpOworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NI RUNLUE9JTlQnKTsKKwlyZXR1cm4gJG5vZGU7Cit9CisKKyMgSGVscGVyIGZ1bmN0aW9uIHRv IGNyZWF0ZSBtdWx0aXBsZSBzdGFuZGJ5IG5vZGVzIGZyb20gdGhlIHNhbWUgb3JpZ2luIG5v ZGUuCisjIEVhY2ggc3RhbmRieSBnZXRzIGl0cyBvd24gYmFja3VwIGFuZCBkYXRhIGRpcmVj dG9yeSwgc28gdGhhdCB0aGV5IHdpbGwKKyMgZ2VuZXJhdGUgaW5kZXBlbmRlbnQgVVVJRHMg b24gcHJvbW90aW9uIGV2ZW4gdGhvdWdoIHRoZXkgc2hhcmUgdGhlIHNhbWUKKyMgdGltZWxp bmUgaGlzdG9yeSB1cCB0byB0aGUgcG9pbnQgb2YgcHJvbW90aW9uLgorc3ViIHNldHVwX3N0 YW5kYnlzX2Zyb21fb3JpZ2luCit7CisJbXkgKCRvcmlnaW4sIEBuYW1lcykgPSBAXzsKKwlt eSBAc3RhbmRieXM7CisJZm9yIG15ICRuYW1lIChAbmFtZXMpCisJeworCQlteSAkc3RhbmRi eSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkbmFtZSk7CisJCSRvcmlnaW4t PmJhY2t1cCgkc3RhbmRieS0+bmFtZSk7CisJCSRzdGFuZGJ5LT5pbml0X2Zyb21fYmFja3Vw KCRvcmlnaW4sICRzdGFuZGJ5LT5uYW1lLAorCQkJaGFzX3N0cmVhbWluZyA9PiAxKTsKKwkJ JHN0YW5kYnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAid2FsX2tlZXBfc2l6 ZSA9IDMyME1CXG4iKTsKKwkJJHN0YW5kYnktPnNldF9zdGFuZGJ5X21vZGUoKTsKKwkJJHN0 YW5kYnktPnN0YXJ0OworCQlwdXNoIEBzdGFuZGJ5cywgJHN0YW5kYnk7CisJfQorCXJldHVy biBAc3RhbmRieXM7Cit9CisKKyMgSGVscGVyIGZ1bmN0aW9uIHRvIHdhaXQgZm9yIG11bHRp cGxlIHN0YW5kYnkgbm9kZXMgdG8gY2F0Y2ggdXAgdG8gdGhlIG9yaWdpbi4KK3N1YiBzeW5j X3N0YW5kYnlzX3dpdGhfb3JpZ2luCit7CisJbXkgKCRvcmlnaW4sIEBzdGFuZGJ5cykgPSBA XzsKKwkkb3JpZ2luLT53YWl0X2Zvcl9jYXRjaHVwKCRfKSBmb3IgQHN0YW5kYnlzOworfQor CisjIEhlbHBlciBmdW5jdGlvbiB0byBpbnNlcnQgYSByb3cgd2l0aCB0aGUgZ2l2ZW4gbGFi ZWwgaW50byBhIG5vZGUncyB0ZXN0IHRhYmxlLgorc3ViIHdyaXRlX3JlY29yZAoreworCW15 ICgkbm9kZSwgJGxhYmVsKSA9IEBfOworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCckbGFiZWwnKSIpOworCSRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0NIRUNLUE9JTlQnKTsKK30KKworIyBUZXN0IHRoYXQgcGdfcmV3 aW5kIGRldGVjdHMgYW5kIGhhbmRsZXMgdHdvIHN0YW5kYnlzIHRoYXQgaW5kZXBlbmRlbnRs eQorIyBwcm9tb3RlZCB0byB0aGUgc2FtZSB0aW1lbGluZSBJRC4gIEJlZm9yZSB0aGUgVVVJ RC1iYXNlZCBkaXZlcmdlbmNlIGNoZWNrLAorIyBwZ19yZXdpbmQncyBzYW1lLVRMSSBzaG9y dGN1dCB3b3VsZCBpbmNvcnJlY3RseSBza2lwIHRoZSByZXdpbmQgaW4gdGhpcworIyBjYXNl LCBsZWF2aW5nIHRoZSB0YXJnZXQncyBkaXZlcmdlZCBXQUwgaW50YWN0LgorIworIyAgIG9y aWdpbiAoVExJIDEpCisjICAgICAgIHwKKyMgICAgICAgKy0tLSBub2RlX2EgKFRMSSAxKSAt LXByb21vdGUtLT4gVExJIDIsIFVVSUQtQSAgKHRhcmdldCkKKyMgICAgICAgfAorIyAgICAg ICArLS0tIG5vZGVfYiAoVExJIDEpIC0tcHJvbW90ZS0tPiBUTEkgMiwgVVVJRC1CICAoc291 cmNlKQorIworIyBwZ19yZXdpbmQgbXVzdCBkZXRlY3QgdGhlIFVVSUQgbWlzbWF0Y2ggYW5k IHJld2luZCBub2RlX2EgdG8gbWF0Y2ggbm9kZV9iLgorCitteSAkbm9kZV9vcmlnaW4gPSBz ZXR1cF9vcmlnaW4oJ29yaWdpbicpOworCisjIENyZWF0ZSBub2RlX2EgYW5kIG5vZGVfYiBm cm9tIHNlcGFyYXRlIGJhY2t1cHMgb2Ygb3JpZ2luIHNvIHRoYXQgZWFjaAorIyBoYXMgaXRz IG93biBkYXRhIGRpcmVjdG9yeSBhbmQgd2lsbCBnZW5lcmF0ZSBhbiBpbmRlcGVuZGVudCBV VUlEIG9uIHByb21vdGlvbi4KK215ICgkbm9kZV9hLCAkbm9kZV9iKSA9CisgIHNldHVwX3N0 YW5kYnlzX2Zyb21fb3JpZ2luKCRub2RlX29yaWdpbiwgJ25vZGVfYScsICdub2RlX2InKTsK KworIyBXYWl0IGZvciBib3RoIHN0YW5kYnlzIHRvIGNhdGNoIHVwIHRvIG9yaWdpbiwgdGhl biBzdG9wIG9yaWdpbi4gIEFmdGVyCisjIHRoaXMgcG9pbnQgdGhlIHR3byBzdGFuZGJ5cyBh cmUgaXNvbGF0ZWQgYW5kIHdpbGwgcHJvbW90ZSBpbmRlcGVuZGVudGx5Lgorc3luY19zdGFu ZGJ5c193aXRoX29yaWdpbigkbm9kZV9vcmlnaW4sICRub2RlX2EsICRub2RlX2IpOworJG5v ZGVfb3JpZ2luLT5zdG9wOworCisjIFByb21vdGUgYm90aCBzdGFuZGJ5cy4gIEVhY2ggbGFu ZHMgb24gVExJIDIgYnV0IGdlbmVyYXRlcyBhIGRpc3RpbmN0IFVVSUQsCisjIHNvIHRoZSBy ZXN1bHRpbmcgY2x1c3RlcnMgYXJlIGRpdmVyZ2VkIGV2ZW4gdGhvdWdoIHRoZXkgc2hhcmUg YSB0aW1lbGluZSBJRC4KKyRub2RlX2EtPnByb21vdGU7Ciskbm9kZV9iLT5wcm9tb3RlOwor CisjIEluc2VydCBhIGRpdmVyZ2VudCByb3cgb24gZWFjaCBzbyB0aGUgcmV3aW5kIGhhcyB2 aXNpYmxlIHdvcmsgdG8gZG8uCit3cml0ZV9yZWNvcmQoJG5vZGVfYSwgJ2luIEEnKTsKK3dy aXRlX3JlY29yZCgkbm9kZV9iLCAnaW4gQicpOworCityZXdpbmRfbm9kZSgkbm9kZV9hLCAk bm9kZV9iLAorCSdwZ19yZXdpbmQgZGV0ZWN0cyBpbmRlcGVuZGVudCBzYW1lLVRMSSBwcm9t b3Rpb25zJyk7CisKK215ICRyZXN1bHQgPQorICAkbm9kZV9hLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCB2YWwgRlJPTSB0YmwgT1JERVIgQlkgdmFsIik7CitpcygkcmVzdWx0 LCAiaW4gQlxub3JpZ2luIiwKKwkncmV3b3VuZCBub2RlIGhhcyBzb3VyY2UgZGF0YSwgbm90 IGl0cyBvd24gZGl2ZXJnZW50IGRhdGEnKTsKKworJG5vZGVfYS0+dGVhcmRvd25fbm9kZTsK KyRub2RlX2ItPnRlYXJkb3duX25vZGU7Ciskbm9kZV9vcmlnaW4tPnRlYXJkb3duX25vZGU7 CisKKyMgVGVzdCB0aGF0IHBnX3Jld2luZCBjb3JyZWN0bHkgcmV3aW5kcyBhY3Jvc3MgYSBU TEkgbWlzbWF0Y2ggYnVyaWVkIGluIGEgc2hhcmVkCisjIHByZWZpeCBvZiB0aGUgdGltZWxp bmUgaGlzdG9yeS4gIFRoZSB0YXJnZXQgaGFzIGdvbmUgdGhyb3VnaCB0aHJlZSB0aW1lbGlu ZXMKKyMgKFRMSSAxIC0+IFRMSSAyIC0+IFRMSSAzKSB3aGlsZSB0aGUgc291cmNlIGluZGVw ZW5kZW50bHkgcHJvbW90ZWQgZnJvbSBUTEkgMQorIyB0byB3aGF0IGlzIG51bWVyaWNhbGx5 IFRMSSAyIGJ1dCB3aXRoIGEgZGlmZmVyZW50IFVVSUQgKFRMSSAyJykuICBUaGUgZGVlcGVz dAorIyBjb21tb24gYW5jZXN0b3IgaXMgdGhlcmVmb3JlIFRMSSAxLCBhbmQgcGdfcmV3aW5k IG11c3QgcmV3aW5kIHRoZSB0YXJnZXQgYWxsCisjIHRoZSB3YXkgYmFjayB0byB0aGUgZW5k IG9mIFRMSSAxLgorIworIyAgIG9yaWdpbiAoVExJIDEpIC0tKy0tIG5vZGVfeCAtLXByb21v dGUtLT4gVExJIDIgLS0gbm9kZV9hIC0tcHJvbW90ZS0tPiBUTEkgMworIyAgICAgICAgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0OiBU TEkgMS0+VExJIDItPlRMSSAzKQorIyAgICAgICAgICAgICAgICAgICAgKy0tIG5vZGVfYiAt LXByb21vdGUtLT4gVExJIDInCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoc291cmNlOiBUTEkgMS0+VExJIDInKQorIworIyBmaW5kQ29tbW9uQW5j ZXN0b3JUaW1lbGluZSB3YWxrcyBmb3J3YXJkOiBUTEkgMSBlbnRyaWVzIG1hdGNoIChVVUlE PTAgb24KKyMgYm90aCBzaWRlcyksIHRoZW4gVExJIDIgdnMgVExJIDInIG1hdGNoIG9uIHRs aSBhbmQgYmVnaW4gYnV0IGRpZmZlciBvbgorIyBVVUlELCBzaWduYWxsaW5nIGluZGVwZW5k ZW50IHByb21vdGlvbnMuICBUaGUgYWxnb3JpdGhtIHRoZXJlZm9yZSBiYWNrcyB1cAorIyB0 byBUTEkgMSBhcyB0aGUgY29tbW9uIGFuY2VzdG9yIGFuZCBzZXRzIHRoZSBkaXZlcmdlbmNl IHBvaW50IHRvIHRoZSBlbmQKKyMgb2YgVExJIDEuCisKK215ICRub2RlX29yaWdpbjIgPSBz ZXR1cF9vcmlnaW4oJ29yaWdpbjInKTsKKworIyBub2RlX3ggYW5kIG5vZGVfYjIgYm90aCBz dGFydCBmcm9tIHRoZSBzYW1lIFRMSSAxIGJhc2VsaW5lLgorbXkgKCRub2RlX3gsICRub2Rl X2IyKSA9CisgIHNldHVwX3N0YW5kYnlzX2Zyb21fb3JpZ2luKCRub2RlX29yaWdpbjIsICdu b2RlX3gnLCAnbm9kZV9iMicpOworCisjIEJvdGggc3RhbmRieXMgbXVzdCBiZSBjYXVnaHQg dXAgdG8gdGhlIHNhbWUgTFNOIGJlZm9yZSBvcmlnaW4gc3RvcHMsIHNvCisjIHRoYXQgVExJ IDIgYW5kIFRMSSAyJyBib3RoIGJlZ2luIGF0IHRoZSBzYW1lIFdBTCBwb3NpdGlvbi4KK3N5 bmNfc3RhbmRieXNfd2l0aF9vcmlnaW4oJG5vZGVfb3JpZ2luMiwgJG5vZGVfeCwgJG5vZGVf YjIpOworJG5vZGVfb3JpZ2luMi0+c3RvcDsKKworIyBQcm9tb3RlIG5vZGVfeCB0byBUTEkg MiAoVVVJRC1YKSBhbmQgaW5zZXJ0IGEgcm93LiAgbm9kZV9iMiBpcyBzdGlsbCBvbgorIyBU TEkgMSBhbmQgaGFzIG5vdCB5ZXQgc2VlbiBhbnkgVExJIDIgV0FMLgorJG5vZGVfeC0+cHJv bW90ZTsKK3dyaXRlX3JlY29yZCgkbm9kZV94LCAneCcpOworCisjIEJ1aWxkIG5vZGVfYTIg YXMgYSBzdGFuZGJ5IG9mIG5vZGVfeCwgdGhlbiBwcm9tb3RlIGl0IHRvIFRMSSAzLgorbXkg KCRub2RlX2EyKSA9IHNldHVwX3N0YW5kYnlzX2Zyb21fb3JpZ2luKCRub2RlX3gsICdub2Rl X2EyJyk7CisKK3N5bmNfc3RhbmRieXNfd2l0aF9vcmlnaW4oJG5vZGVfeCwgJG5vZGVfYTIp OworJG5vZGVfeC0+c3RvcDsKKworJG5vZGVfYTItPnByb21vdGU7CisKKyMgTm93IHByb21v dGUgbm9kZV9iMiBpbmRlcGVuZGVudGx5IGZyb20gVExJIDEgdG8gVExJIDInIChVVUlELUIs ICE9IFVVSUQtWCkuCiskbm9kZV9iMi0+cHJvbW90ZTsKK3dyaXRlX3JlY29yZCgkbm9kZV9i MiwgJ2InKTsKKworIyBSZXdpbmQgbm9kZV9hMiAoVExJIDEtPlRMSSAyLT5UTEkgMykgZnJv bSBub2RlX2IyIChUTEkgMS0+VExJIDInKSBpbgorIyBsb2NhbCBtb2RlLiAgVGhlIHJld2lu ZCBtdXN0IHJlYWNoIGJhY2sgdG8gdGhlIGVuZCBvZiBUTEkgMS4KKyMKKyMgbm9kZV9hMiB3 YXMgaW5pdGlhbGlzZWQgZnJvbSBhIHN0cmVhbWluZyBiYWNrdXAgb2Ygbm9kZV94IHRha2Vu IGFmdGVyCisjIG5vZGVfeCBoYWQgYWxyZWFkeSBjb21wbGV0ZWQgc2VnbWVudCA0IG9mIFRM SSAyOyB0aGF0IHNlZ21lbnQgdGhlcmVmb3JlCisjIGRvZXMgbm90IGFwcGVhciBpbiBub2Rl X2EyJ3MgcGdfd2FsLiAgcGdfcmV3aW5kJ3MgYmFja3dhcmQgc2NhbiBmb3IgdGhlCisjIGxh c3QgY2hlY2twb2ludCBiZWZvcmUgdGhlIGRpdmVyZ2VuY2UgcG9pbnQgbmVlZHMgdGhhdCBz ZWdtZW50LCBzbyB3ZQorIyBwb2ludCByZXN0b3JlX2NvbW1hbmQgYXQgbm9kZV94J3MgcGdf d2FsIGFuZCB1c2UgLS1yZXN0b3JlLXRhcmdldC13YWwuCisjCisjIE5vdGU6IG5vIHJvdyBp cyBpbnNlcnRlZCBvbiBUTEkgMy4gIFRoaXMgaXMgaW50ZW50aW9uYWw6IHRoZSBvbmx5Cisj IHBvc3QtZGl2ZXJnZW5jZSB0YWJsZSBtb2RpZmljYXRpb24gaW4gdGhlIHRhcmdldCdzIFdB TCBpcyB0aGUgJ3gnIElOU0VSVAorIyBvbiBUTEkgMi4gIE9uIHVucGF0Y2hlZCBjb2RlIHRo ZSBXQUwgc2NhbiB3b3VsZCBzdGFydCBmcm9tIHRoZSBUTEkgMgorIyBzaHV0ZG93biBjaGVj a3BvaW50IChqdXN0IGJlZm9yZSBUTEkgMyksIG1pc3MgdGhhdCBlYXJsaWVyIGluc2VydCwg YW5kCisjIGxlYXZlICd4JyBpbiBwbGFjZSBpbnN0ZWFkIG9mIHJlcGxhY2luZyBpdCB3aXRo ICdiJy4KK215ICRub2RlX3hfd2FsZGlyID0gJG5vZGVfeC0+ZGF0YV9kaXIgLiAiL3BnX3dh bCI7CitpZiAoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp3aW5kb3dzX29zKQoreworCSRu b2RlX3hfd2FsZGlyID1+IHN7XFx9e1xcXFx9ZzsKKwkkbm9kZV9hMi0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsCisJCXFxKFxucmVzdG9yZV9jb21tYW5kID0gJ2NvcHkgIiRu b2RlX3hfd2FsZGlyXFxcXCVmIiAiJXAiJ1xuKSk7Cit9CitlbHNlCit7CisJJG5vZGVfYTIt PmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQlxcShcbnJlc3RvcmVfY29tbWFu ZCA9ICdjcCAiJG5vZGVfeF93YWxkaXIvJWYiICIlcCInXG4pKTsKK30KKworcmV3aW5kX25v ZGUoCisJJG5vZGVfYTIsICRub2RlX2IyLAorCSdwZ19yZXdpbmQgcmV3aW5kcyBhY3Jvc3Mg bWlzbWF0Y2hlZCBUTEkgMiAvIFRMSSAyLXByaW1lIHRvIFRMSSAxJywKKwktcmVzdG9yZXdh bCA9PiAxKTsKK215ICRyZXN1bHQyID0KKyAgJG5vZGVfYTItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIHZhbCBGUk9NIHRibCBPUkRFUiBCWSB2YWwiKTsKK2lzKCRyZXN1bHQy LCAiYlxub3JpZ2luMiIsCisJJ3Jld291bmQgbm9kZSByZWZsZWN0cyBzb3VyY2UgaGlzdG9y eSwgbm90IHRhcmdldCBUTEkgMi9UTEkgMyBkYXRhJyk7CisKKyRub2RlX2EyLT50ZWFyZG93 bl9ub2RlOworJG5vZGVfYjItPnRlYXJkb3duX25vZGU7Ciskbm9kZV94LT50ZWFyZG93bl9u b2RlOworJG5vZGVfb3JpZ2luMi0+dGVhcmRvd25fbm9kZTsKKworIyBUZXN0IHRoYXQgcGdf cmV3aW5kIGNvcnJlY3RseSBkZXRlY3RzIGEgbWlzbWF0Y2ggd2hlbiBvbmUgY2x1c3Rlcidz IFRMSSAyCisjIGhpc3RvcnkgZW50cnkgY2FycmllcyBhIHplcm8gVVVJRCAob2xkLWZvcm1h dCBoaXN0b3J5IGZpbGUpIHdoaWxlIHRoZSBvdGhlcgorIyBjYXJyaWVzIGEgcmVhbCBVVUlE LiAgVGhlIHR3byBjbHVzdGVycyBtdXN0IGhhdmUgcHJvbW90ZWQgaW5kZXBlbmRlbnRseSwg c28KKyMgcGdfcmV3aW5kIG11c3QgcmV3aW5kIHRvIFRMSSAxIHJhdGhlciB0aGFuIGFjY2Vw dGluZyB0aGUgc2FtZS1UTEkgc2hvcnRjdXQuCisjCisjIFJ1biBib3RoIG9yaWVudGF0aW9u czoKKyMgICAoYSkgdGFyZ2V0IGhhcyB6ZXJvIFVVSUQsIHNvdXJjZSBoYXMgcmVhbCBVVUlE CisjICAgKGIpIHRhcmdldCBoYXMgcmVhbCBVVUlELCBzb3VyY2UgaGFzIHplcm8gVVVJRAor IworIyBJbiBib3RoIGNhc2VzIHRoZSBzZXR1cCBpczoKKyMKKyMgICBvcmlnaW4gKFRMSSAx KSAtLSstLSBub2RlX3AgLS1wcm9tb3RlLS0+IFRMSSAyLCBVVUlELVAgICh0YXJnZXQpCisj ICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgICAgICAgICAgICAgICArLS0gbm9kZV9x IC0tcHJvbW90ZS0tPiBUTEkgMiwgVVVJRC1RICAoc291cmNlKQorIworIyBPbmUgc2lkZSB0 aGVuIGhhcyBpdHMgaGlzdG9yeSBmaWxlIHJld3JpdHRlbiB0byB0aGUgb2xkIDMtZmllbGQg Zm9ybWF0IHNvCisjIHRoYXQgaXRzIFVVSUQgcmVhZHMgYXMgemVyby4gIHBnX3Jld2luZCBt dXN0IHRyZWF0IHplcm8tdnMtbm9uemVybyBhcworIyBpbmNvbXBhdGlibGUgKHRoZXkgY2Fu bm90IGJlIHRoZSBzYW1lIHByb21vdGlvbikgYW5kIHJld2luZCB0byBUTEkgMS4KKworZm9y IG15ICRzdHJpcF90YXJnZXQgKDEsIDApCit7CisJbXkgJHplcm9fc2lkZSA9ICRzdHJpcF90 YXJnZXQgPyAndGFyZ2V0JyA6ICdzb3VyY2UnOworCW15ICRyZWFsX3NpZGUgPSAkc3RyaXBf dGFyZ2V0ID8gJ3NvdXJjZScgOiAndGFyZ2V0JzsKKwlteSAkc2Z4ID0gJHN0cmlwX3Rhcmdl dCA/ICd6dCcgOiAnenMnOworCW15ICRsYWJlbCA9CisJICAicGdfcmV3aW5kIHJld2luZHMg d2hlbiAkemVyb19zaWRlIGhhcyB6ZXJvIFVVSUQgYW5kICRyZWFsX3NpZGUgaGFzIHJlYWwg VVVJRCI7CisKKwlteSAkbm9kZV9vcmlnaW4zID0gc2V0dXBfb3JpZ2luKCJvcmlnaW4zXyRz ZngiKTsKKwlteSAoJG5vZGVfcCwgJG5vZGVfcSkgPQorCSAgc2V0dXBfc3RhbmRieXNfZnJv bV9vcmlnaW4oJG5vZGVfb3JpZ2luMywgIm5vZGVfcF8kc2Z4IiwgIm5vZGVfcV8kc2Z4Iik7 CisKKwlzeW5jX3N0YW5kYnlzX3dpdGhfb3JpZ2luKCRub2RlX29yaWdpbjMsICRub2RlX3As ICRub2RlX3EpOworCSRub2RlX29yaWdpbjMtPnN0b3A7CisKKwkkbm9kZV9wLT5wcm9tb3Rl OworCSRub2RlX3EtPnByb21vdGU7CisKKwl3cml0ZV9yZWNvcmQoJG5vZGVfcCwgJ2luIFAn KTsKKwl3cml0ZV9yZWNvcmQoJG5vZGVfcSwgJ2luIFEnKTsKKworCSMgU3RyaXAgVVVJRCBm cm9tIHRoZSBjaG9zZW4gc2lkZSB0byBzaW11bGF0ZSBhIHByZS1VVUlEIHNlcnZlci4KKwlz dHJpcF90bGlfdXVpZCgkc3RyaXBfdGFyZ2V0ID8gJG5vZGVfcCA6ICRub2RlX3EsIDIpOwor CisJcmV3aW5kX25vZGUoJG5vZGVfcCwgJG5vZGVfcSwgJGxhYmVsKTsKKwlteSAkcmVzdWx0 MyA9CisJICAkbm9kZV9wLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2YWwgRlJP TSB0YmwgT1JERVIgQlkgdmFsIik7CisJaXMoICRyZXN1bHQzLAorCQkiaW4gUVxub3JpZ2lu M18kc2Z4IiwKKwkJJ3Jld291bmQgbm9kZSBoYXMgc291cmNlIGRhdGEsIG5vdCBpdHMgb3du IGRpdmVyZ2VudCByb3cnKTsKKworCSRub2RlX3AtPnRlYXJkb3duX25vZGU7CisJJG5vZGVf cS0+dGVhcmRvd25fbm9kZTsKKwkkbm9kZV9vcmlnaW4zLT50ZWFyZG93bl9ub2RlOworfQor CisjIFRlc3QgdGhhdCBwZ19yZXdpbmQgZGV0ZWN0cyBpbmRlcGVuZGVudCBwcm9tb3Rpb25z IHRvIFRMSSAzIHdoZW4gYm90aAorIyBjbHVzdGVycyBzaGFyZSBhIGNvbW1vbiBUTEkgMSAt PiBUTEkgMiBoaXN0b3J5IChzYW1lIFVVSUQpIGJ1dCBpbmRlcGVuZGVudGx5CisjIHByb21v dGVkIGZyb20gVExJIDIgdG8gVExJIDMsIHByb2R1Y2luZyBkaWZmZXJlbnQgVExJIDMgVVVJ RHMuCisjCisjICAgb3JpZ2luIChUTEkgMSkgLS0tIG5vZGVfbWlkIC0tcHJvbW90ZS0tPiBU TEkgMiwgVVVJRC1NCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArLS0gbm9kZV9jIC0tcHJvbW90ZS0tPiBUTEkgMywgVVVJRC1DICAodGFy Z2V0KQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKy0tIG5vZGVfZCAtLXByb21vdGUtLT4gVExJIDMnLCBVVUlELUQgIChzb3VyY2UpCisj CisjIFRoZSBzYW1lLVRMSSBzaG9ydGN1dCBjb21wYXJlcyBlbnRyeVtOZW50cmllcy0yXS50 bHV1aWQgb24gZWFjaCBzaWRlOyB0aGF0CisjIGlzIHRoZSBVVUlEIG9mIHRoZSBUTEkgMyBw cm9tb3Rpb24sIHdoaWNoIGRpZmZlcnMuICBUaGUgZnVsbCByZXdpbmQgcGF0aAorIyB0aGVu IHdhbGtzIHRoZSBoaXN0b3J5IGZvcndhcmQ6IFRMSSAxIG1hdGNoZXMgKHNhbWUgdGxpL2Jl Z2luL1VVSUQtTSBhdAorIyBlbnRyeVswXSksIFRMSSAyIGFsc28gbWF0Y2hlcyAoc2FtZSB0 bGkvYmVnaW47IFVVSUQtTSBpcyB0aGUgc2FtZSBvbiBib3RoCisjIHNpZGVzIGF0IGVudHJ5 WzBdKSwgYnV0IFRMSSAzIHZzIFRMSSAzJyBkaWZmZXIgYXQgZW50cnlbMV0gKFVVSUQtQyAh PSBVVUlELUQpLAorIyBzbyB0aGUgZGl2ZXJnZW5jZSBwb2ludCBpcyBzZXQgdG8gdGhlIGVu ZCBvZiBUTEkgMi4KKworbXkgJG5vZGVfb3JpZ2luNCA9IHNldHVwX29yaWdpbignb3JpZ2lu NCcpOworbXkgKCRub2RlX21pZCkgPSBzZXR1cF9zdGFuZGJ5c19mcm9tX29yaWdpbigkbm9k ZV9vcmlnaW40LCAnbm9kZV9taWQnKTsKKworc3luY19zdGFuZGJ5c193aXRoX29yaWdpbigk bm9kZV9vcmlnaW40LCAkbm9kZV9taWQpOworJG5vZGVfb3JpZ2luNC0+c3RvcDsKKworIyBQ cm9tb3RlIG5vZGVfbWlkIHRvIFRMSSAyIGFuZCBpbnNlcnQgYSByb3cgdGhhdCBib3RoIFRM SSAzIG5vZGVzIHdpbGwgc2hhcmUuCiskbm9kZV9taWQtPnByb21vdGU7Cit3cml0ZV9yZWNv cmQoJG5vZGVfbWlkLCAnbWlkJyk7CisKKyMgbm9kZV9jIGFuZCBub2RlX2QgYm90aCBzdGFy dCBhcyBzdGFuZGJ5cyBvZiBub2RlX21pZCBzbyB0aGV5IHNoYXJlIHRoZSBzYW1lCisjIFRM SSAyIHByb21vdGlvbiBVVUlEIChVVUlELU0pLgorbXkgKCRub2RlX2MsICRub2RlX2QpID0K KyAgc2V0dXBfc3RhbmRieXNfZnJvbV9vcmlnaW4oJG5vZGVfbWlkLCAnbm9kZV9jJywgJ25v ZGVfZCcpOworc3luY19zdGFuZGJ5c193aXRoX29yaWdpbigkbm9kZV9taWQsICRub2RlX2Ms ICRub2RlX2QpOworJG5vZGVfbWlkLT5zdG9wOworCisjIFByb21vdGUgYm90aCBpbmRlcGVu ZGVudGx5OyBlYWNoIGdlbmVyYXRlcyBhIGRpc3RpbmN0IFRMSSAzIFVVSUQuCiskbm9kZV9j LT5wcm9tb3RlOworJG5vZGVfZC0+cHJvbW90ZTsKKword3JpdGVfcmVjb3JkKCRub2RlX2Ms ICdjJyk7Cit3cml0ZV9yZWNvcmQoJG5vZGVfZCwgJ2QnKTsKKworcmV3aW5kX25vZGUoJG5v ZGVfYywgJG5vZGVfZCwKKwkncGdfcmV3aW5kIGRldGVjdHMgaW5kZXBlbmRlbnQgVExJIDMg LyBUTEkgMy1wcmltZSBwcm9tb3Rpb25zIHNoYXJpbmcgVExJIDInCispOworbXkgJHJlc3Vs dDQgPQorICAkbm9kZV9jLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2YWwgRlJP TSB0YmwgT1JERVIgQlkgdmFsIik7CitpcygkcmVzdWx0NCwgImRcbm1pZFxub3JpZ2luNCIs CisJJ3Jld291bmQgbm9kZSBoYXMgc291cmNlIFRMSSAzLXByaW1lIGRhdGEsIG5vdCBpdHMg b3duIFRMSSAzIGRhdGEnKTsKKworJG5vZGVfYy0+dGVhcmRvd25fbm9kZTsKKyRub2RlX2Qt PnRlYXJkb3duX25vZGU7Ciskbm9kZV9taWQtPnRlYXJkb3duX25vZGU7Ciskbm9kZV9vcmln aW40LT50ZWFyZG93bl9ub2RlOworCisjIFRlc3QgdGhhdCBwZ19yZXdpbmQgZG9lcyBub3Qg ZmFpbCB3aGVuIHRoZSB0YXJnZXQgaGFzIG5vIGxvY2FsIGNvcHkgb2YgaXRzIG93bgorIyBj dXJyZW50IFRMSSdzIGhpc3RvcnkgZmlsZSwgZm9yIGV4YW1wbGUsIGJlY2F1c2UgaXQgc3Rh cnRlZCBzdHJlYW1pbmcgdGhhdCBUTEkKKyMgZnJvbSBhIHByaW1hcnkgdGhhdCBoYWQgYWxy ZWFkeSBwcm9tb3RlZCwgd2l0aG91dCBldmVyIGl0c2VsZiBwZXJmb3JtaW5nIGEKKyMgcHJv bW90aW9uIG9yIG90aGVyd2lzZSBvYnRhaW5pbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSBmaWxl LgorIworIyBXaXRob3V0IHRoYXQgZmlsZSwgcGdfcmV3aW5kIGNhbm5vdCByZWFkIHRoZSBw cm9tb3Rpb24gVVVJRCBmb3IgdGhlIHNoYXJlZCBUTEkKKyMgb24gdGhlIHRhcmdldCBzaWRl LCBhbmQgc28gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHdvIGNsdXN0ZXJzIGFyZSB0aGUg c2FtZQorIyBwcm9tb3Rpb24gb3IgdHdvIGluZGVwZW5kZW50IG9uZXMuCisjCisjIFdlIGNo ZWNrIHRoYXQgbm8gcmV3aW5kIGRvZXMgYWN0dWFsbHkgdGFrZSBwbGFjZSwgbm90IGp1c3Qg dGhhdCB0aGUgZXJyb3IKKyMgbWVzc2FnZSBpcyBjb3JyZWN0LiBGb3IgdGhhdCByZWFzb24s IHdlIGNyZWF0ZSB0d28gZGl2ZXJnZW50IG5vZGVzIGZvciB0aGUKKyMgdGVzdCwgcmVtb3Zl IHRoZSBoaXN0b3J5IGZpbGUsIGFuZCB0aGVuIGF0dGVtcHQgYSByZXdpbmQuIElmIHRoZSBj b2RlIHdvcmtzCisjIGNvcnJlY3RseSwgdGhlIG5vZGUgc2hvdWxkIG5vdCBiZSByZXdvdW5k LgorbXkgJG5vZGVfb3JpZ2luNSA9IHNldHVwX29yaWdpbignb3JpZ2luNScpOworbXkgKCRu b2RlX2csICRub2RlX2gpID0KKyAgc2V0dXBfc3RhbmRieXNfZnJvbV9vcmlnaW4oJG5vZGVf b3JpZ2luNSwgJ25vZGVfZycsICdub2RlX2gnKTsKKworc3luY19zdGFuZGJ5c193aXRoX29y aWdpbigkbm9kZV9vcmlnaW41LCAkbm9kZV9nLCAkbm9kZV9oKTsKKyRub2RlX29yaWdpbjUt PnN0b3A7CisKKyRub2RlX2ctPnByb21vdGU7Ciskbm9kZV9oLT5wcm9tb3RlOworCit3cml0 ZV9yZWNvcmQoJG5vZGVfZywgJ2luIEcnKTsKK3dyaXRlX3JlY29yZCgkbm9kZV9oLCAnaW4g SCcpOworCitteSAkc2F2ZWRfaGlzdG9yeSA9IHJlbW92ZV90bGlfaGlzdG9yeSgkbm9kZV9n LCAyKTsKKworcmV3aW5kX25vZGUoCisJJG5vZGVfZywgJG5vZGVfaCwKKwkncGdfcmV3aW5k IGRvZXMgbm90IGZhaWwgd2hlbiB0YXJnZXQgaGlzdG9yeSBmaWxlIGlzIG1pc3NpbmcnLAor CS1ub3Jlc3RhcnQgPT4gMSk7CisKKyMgUmVzdG9yZSB0aGUgaGlzdG9yeSBmaWxlIG9mIG5v ZGVfZyBiZWZvcmUgaXQgZ2V0cyByZXN0YXJ0ZWQuIFdlIGFyZSB0ZXN0aW5nCisjIHRoYXQg cGdfcmV3aW5kIGNhbiBoYW5kbGUgYSBtaXNzaW5nIGhpc3RvcnkgZmlsZSwgYnV0IHVubGlr ZSB0aGUgcmVhbC13b3JsZAorIyBjYXNlIHRoaXMgc2ltdWxhdGVzLCB0aGUgcGdfd2FsIGRp cmVjdG9yeSBvZiBub2RlX2cgc3RpbGwgaGFzIGl0cyBvd24gZ2VudWluZQorIyBUTEkgMSBz ZWdtZW50cyBvbiBkaXNrIGFuZCB0aGUgc2VydmVyIGNhbm5vdCBzdGFydCBiYWNrIHVwIHdp dGhvdXQgdGhlIGZpbGUKKyMgbGlua2luZyB0aGVtIHRvIFRMSSAyLgorcmVzdG9yZV90bGlf aGlzdG9yeSgkbm9kZV9nLCAyLCAkc2F2ZWRfaGlzdG9yeSk7CisKKyRub2RlX2ctPnJlc3Rh cnQ7CisKK215ICRyZXN1bHQ1ID0KKyAgJG5vZGVfZy0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgdmFsIEZST00gdGJsIE9SREVSIEJZIHZhbCIpOworaXMoICRyZXN1bHQ1LAor CSJpbiBHXG5vcmlnaW41IiwKKwknbWlzc2luZyBoaXN0b3J5IGZpbGUgcHJldmVudHMgZGl2 ZXJnZW5jZSBkZXRlY3Rpb246IHRhcmdldCBkYXRhIGxlZnQgdW5jaGFuZ2VkJworKTsKKwor JG5vZGVfZy0+dGVhcmRvd25fbm9kZTsKKyRub2RlX2gtPnRlYXJkb3duX25vZGU7Ciskbm9k ZV9vcmlnaW41LT50ZWFyZG93bl9ub2RlOworCiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfcmV3aW5kL3RpbWVsaW5lLmMgYi9zcmMvYmluL3BnX3Jld2luZC90 aW1lbGluZS5jCmluZGV4IGY0ZTFkN2Y3ZDFiLi42MDYyZDc4ZTMwYiAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19yZXdpbmQvdGltZWxpbmUuYworKysgYi9zcmMvYmluL3BnX3Jld2luZC90 aW1lbGluZS5jCkBAIC05LDEwICs5LDQxIEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlc19m ZS5oIgogCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwogI2lu Y2x1ZGUgImFjY2Vzcy90aW1lbGluZS5oIgogI2luY2x1ZGUgImNvbW1vbi9wZ19wYXJzZV9s c24uaCIKICNpbmNsdWRlICJwZ19yZXdpbmQuaCIKIAorLyoKKyAqIFBhcnNlIGEgVVVJRCBz dHJpbmcgaW4gc3RhbmRhcmQgZGFzaGVkIGZvcm0gaW50byBhIHBnX3V1aWRfdC4KKyAqIFJl dHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBpZiBzdHIgaXMgbm90IGEgdmFsaWQgVVVJ RCBzdHJpbmcuCisgKi8KK3N0YXRpYyBib29sCityZXdpbmRfcGFyc2VfdXVpZChjb25zdCBj aGFyICpzdHIsIHBnX3V1aWRfdCAqdXVpZCkKK3sKKwljb25zdCBjaGFyICpzcmMgPSBzdHI7 CisKKwlmb3IgKGludCBpID0gMDsgaSA8IFVVSURfTEVOOyBpKyspCisJeworCQljaGFyCQli dWZbM107CisKKwkJaWYgKCFpc3hkaWdpdCgodW5zaWduZWQgY2hhcikgc3JjWzBdKSB8fAor CQkJIWlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSBzcmNbMV0pKQorCQkJcmV0dXJuIGZhbHNl OworCQlidWZbMF0gPSBzcmNbMF07CisJCWJ1ZlsxXSA9IHNyY1sxXTsKKwkJYnVmWzJdID0g J1wwJzsKKwkJdXVpZC0+ZGF0YVtpXSA9ICh1bnNpZ25lZCBjaGFyKSBzdHJ0b3VsKGJ1Ziwg TlVMTCwgMTYpOworCQlzcmMgKz0gMjsKKwkJLyogc2tpcCBkYXNoIGF0IHBvc2l0aW9ucyBh ZnRlciBieXRlcyAzLCA1LCA3LCA5IChpID09IDMsNSw3LDkpICovCisJCWlmIChzcmNbMF0g PT0gJy0nICYmIChpID09IDMgfHwgaSA9PSA1IHx8IGkgPT0gNyB8fCBpID09IDkpKQorCQkJ c3JjKys7CisJfQorCXJldHVybiAoKnNyYyA9PSAnXDAnKTsKK30KKwogLyoKICAqIFRoaXMg aXMgY29weS1wYXN0ZWQgZnJvbSB0aGUgYmFja2VuZCByZWFkVGltZUxpbmVIaXN0b3J5LCBt b2RpZmllZCB0bwogICogcmV0dXJuIGEgbWFsbG9jJ2QgYXJyYXkgYW5kIHRvIHdvcmsgd2l0 aG91dCBiYWNrZW5kIGZ1bmN0aW9ucy4KQEAgLTUyLDYgKzgzLDcgQEAgcmV3aW5kX3BhcnNl VGltZUxpbmVIaXN0b3J5KGNoYXIgKmJ1ZmZlciwgVGltZUxpbmVJRCB0YXJnZXRUTEksIGlu dCAqbmVudHJpZXMpCiAJCWJvb2wJCXZhbGlkX3N3aXRjaHBvaW50ID0gZmFsc2U7CiAJCWlu dAkJCW5jaGFyczsKIAkJc2l6ZV90CQluc3BhY2VzOworCQljaGFyCQl1dWlkX3N0cltVVUlE X1NUUl9MRU4gKyAxXSA9IHswfTsKIAogCQlmbGluZSA9IGJ1ZnB0cjsKIAkJd2hpbGUgKCpi dWZwdHIgJiYgKmJ1ZnB0ciAhPSAnXG4nKQpAQCAtOTQsNiArMTI2LDcgQEAgcmV3aW5kX3Bh cnNlVGltZUxpbmVIaXN0b3J5KGNoYXIgKmJ1ZmZlciwgVGltZUxpbmVJRCB0YXJnZXRUTEks IGludCAqbmVudHJpZXMpCiAJCQkqdG9rZW5fZW5kID0gJ1wwJzsKIAkJCXZhbGlkX3N3aXRj aHBvaW50ID0gcGdfcGFyc2VfbHNuKHB0ciwgJnN3aXRjaHBvaW50KTsKIAkJCSp0b2tlbl9l bmQgPSBzYXZlOworCQkJcHRyID0gdG9rZW5fZW5kOwogCQl9CiAKIAkJaWYgKCF2YWxpZF9z d2l0Y2hwb2ludCkKQEAgLTEyMCw3ICsxNTMsMjkgQEAgcmV3aW5kX3BhcnNlVGltZUxpbmVI aXN0b3J5KGNoYXIgKmJ1ZmZlciwgVGltZUxpbmVJRCB0YXJnZXRUTEksIGludCAqbmVudHJp ZXMpCiAJCWVudHJ5LT5lbmQgPSBzd2l0Y2hwb2ludDsKIAkJcHJldmVuZCA9IGVudHJ5LT5l bmQ7CiAKLQkJLyogd2UgaWdub3JlIHRoZSByZW1haW5kZXIgb2YgZWFjaCBsaW5lICovCisJ CS8qCisJCSAqIFBhcnNlIHRoZSBvcHRpb25hbCBVVUlEIGZpZWxkIHRoYXQgZm9sbG93cyB0 aGUgc3dpdGNocG9pbnQuIE9sZAorCQkgKiBoaXN0b3J5IGZpbGVzIGhhdmUgYSBodW1hbi1y ZWFkYWJsZSByZWFzb24gc3RyaW5nIHRoZXJlIGluc3RlYWQ7CisJCSAqIGl0cyBmaXJzdCB3 b3JkIGlzIG11Y2ggc2hvcnRlciB0aGFuIFVVSURfU1RSX0xFTiwgc28gdGhlIGxlbmd0aAor CQkgKiBjaGVjayBzYWZlbHkgZGlzdGluZ3Vpc2hlcyBvbGQgZnJvbSBuZXcgZm9ybWF0LiAg V2UgaWdub3JlIHRoZQorCQkgKiByZW1haW5kZXIgb2YgdGhlIGxpbmUgYmV5b25kIHRoZSBV VUlEIGZpZWxkLgorCQkgKi8KKwkJbWVtc2V0KCZlbnRyeS0+dGx1dWlkLCAwLCBzaXplb2Yo cGdfdXVpZF90KSk7CisJCW5zcGFjZXMgPSBzdHJzcG4ocHRyLCAiIFx0XG5cclxmXHYiKTsK KwkJaWYgKG5zcGFjZXMgPiAwKQorCQl7CisJCQlwZ191dWlkX3QJYnVmOworCisJCQlwdHIg Kz0gbnNwYWNlczsKKwkJCXRva2VuX2VuZCA9IHB0ciArIHN0cmNzcG4ocHRyLCAiIFx0XG5c clxmXHYiKTsKKwkJCWlmICgoc2l6ZV90KSAodG9rZW5fZW5kIC0gcHRyKSA9PSBVVUlEX1NU Ul9MRU4pCisJCQl7CisJCQkJbWVtY3B5KHV1aWRfc3RyLCBwdHIsIFVVSURfU1RSX0xFTik7 CisJCQkJdXVpZF9zdHJbVVVJRF9TVFJfTEVOXSA9ICdcMCc7CisJCQkJaWYgKHJld2luZF9w YXJzZV91dWlkKHV1aWRfc3RyLCAmYnVmKSkKKwkJCQkJbWVtY3B5KCZlbnRyeS0+dGx1dWlk LCAmYnVmLCBzaXplb2YocGdfdXVpZF90KSk7CisJCQl9CisJCX0KIAl9CiAKIAlpZiAoZW50 cmllcyAmJiB0YXJnZXRUTEkgPD0gbGFzdHRsaSkKQEAgLTE0NCw2ICsxOTksNyBAQCByZXdp bmRfcGFyc2VUaW1lTGluZUhpc3RvcnkoY2hhciAqYnVmZmVyLCBUaW1lTGluZUlEIHRhcmdl dFRMSSwgaW50ICpuZW50cmllcykKIAllbnRyeS0+dGxpID0gdGFyZ2V0VExJOwogCWVudHJ5 LT5iZWdpbiA9IHByZXZlbmQ7CiAJZW50cnktPmVuZCA9IEludmFsaWRYTG9nUmVjUHRyOwor CW1lbXNldCgmZW50cnktPnRsdXVpZCwgMCwgc2l6ZW9mKHBnX3V1aWRfdCkpOwogCiAJKm5l bnRyaWVzID0gbmxpbmVzOwogCXJldHVybiBlbnRyaWVzOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RpbWVsaW5lLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGltZWxpbmUu aAppbmRleCAzYWVlMzQxOWE1Yy4uM2I5NGM0ZjBhNGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90aW1lbGluZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90aW1lbGlu ZS5oCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIK ICNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAidXRpbHMvdXVpZC5oIgog CiAvKgogICogQSBsaXN0IG9mIHRoZXNlIHN0cnVjdHMgZGVzY3JpYmVzIHRoZSB0aW1lbGlu ZSBoaXN0b3J5IG9mIHRoZSBzZXJ2ZXIuIEVhY2gKQEAgLTIyLDkgKzIzLDEwIEBACiAgKiBw b2ludGVycyBvZiBhbGwgdGhlIGVudHJpZXMgZm9ybSBhIGNvbnRpZ3VvdXMgbGluZSBmcm9t IGJlZ2lubmluZyBvZiB0aW1lCiAgKiB0byBpbmZpbml0eS4KICAqLwotdHlwZWRlZiBzdHJ1 Y3QKK3R5cGVkZWYgc3RydWN0IFRpbWVMaW5lSGlzdG9yeUVudHJ5CiB7CiAJVGltZUxpbmVJ RAl0bGk7CisJcGdfdXVpZF90CXRsdXVpZDsJCQkvKiBmcm9tIGhpc3RvcnkgZmlsZTsgemVy byBpZiB1bmtub3duICovCiAJWExvZ1JlY1B0cgliZWdpbjsJCQkvKiBpbmNsdXNpdmUgKi8K IAlYTG9nUmVjUHRyCWVuZDsJCQkvKiBleGNsdXNpdmUsIEludmFsaWRYTG9nUmVjUHRyIG1l YW5zIGluZmluaXR5ICovCiB9IFRpbWVMaW5lSGlzdG9yeUVudHJ5OwpAQCAtMzMsNiArMzUs NyBAQCBleHRlcm4gTGlzdCAqcmVhZFRpbWVMaW5lSGlzdG9yeShUaW1lTGluZUlEIHRhcmdl dFRMSSk7CiBleHRlcm4gYm9vbCBleGlzdHNUaW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCBw cm9iZVRMSSk7CiBleHRlcm4gVGltZUxpbmVJRCBmaW5kTmV3ZXN0VGltZUxpbmUoVGltZUxp bmVJRCBzdGFydFRMSSk7CiBleHRlcm4gdm9pZCB3cml0ZVRpbWVMaW5lSGlzdG9yeShUaW1l TGluZUlEIG5ld1RMSSwgVGltZUxpbmVJRCBwYXJlbnRUTEksCisJCQkJCQkJCSBjb25zdCBw Z191dWlkX3QgKm5ld1RMVVVJRCwKIAkJCQkJCQkJIFhMb2dSZWNQdHIgc3dpdGNocG9pbnQs IGNvbnN0IGNoYXIgKnJlYXNvbik7CiBleHRlcm4gdm9pZCB3cml0ZVRpbWVMaW5lSGlzdG9y eUZpbGUoVGltZUxpbmVJRCB0bGksIGNvbnN0IGNoYXIgKmNvbnRlbnQsIHNpemVfdCBzaXpl KTsKIGV4dGVybiB2b2lkIHJlc3RvcmVUaW1lTGluZUhpc3RvcnlGaWxlcyhUaW1lTGluZUlE IGJlZ2luLCBUaW1lTGluZUlEIGVuZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MveGxvZ19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJuYWwu aAppbmRleCBiZjYwOWMzYzcwMy4uY2VmOWE1ZGRlZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hs b2dfaW50ZXJuYWwuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9n ZGVmcy5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCiAjaW5jbHVkZSAiZGF0 YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAidXRpbHMvdXVpZC5oIgogI2luY2x1ZGUg ImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAicGd0aW1lLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9ibG9jay5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdXVpZC5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvdXVpZC5oCmluZGV4IDU3MmQ4Y2Y0YzM2Li40N2E2YWYwYWIz YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvdXVpZC5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL3V1aWQuaApAQCAtMTcsMTIgKzE3LDE2IEBACiAvKiB1dWlkIHNpemUgaW4g Ynl0ZXMgKi8KICNkZWZpbmUgVVVJRF9MRU4gMTYKIAorLyogbGVuZ3RoIG9mIGEgVVVJRCBz dHJpbmcgKHdpdGhvdXQgbnVsbCB0ZXJtaW5hdG9yKTogeHh4eHh4eHgteHh4eC14eHh4LXh4 eHgteHh4eHh4eHh4eHh4ICovCisjZGVmaW5lIFVVSURfU1RSX0xFTiAzNgorCiB0eXBlZGVm IHN0cnVjdCBwZ191dWlkX3QKIHsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbVVVJRF9MRU5dOwog fSBwZ191dWlkX3Q7CiAKLS8qIGZtZ3IgaW50ZXJmYWNlIG1hY3JvcyAqLworLyogZm1nciBp bnRlcmZhY2UgbWFjcm9zIChiYWNrZW5kIG9ubHkpICovCisjaWZuZGVmIEZST05URU5ECiBz dGF0aWMgaW5saW5lIERhdHVtCiBVVUlEUEdldERhdHVtKGNvbnN0IHBnX3V1aWRfdCAqWCkK IHsKQEAgLTM5LDQgKzQzLDggQEAgRGF0dW1HZXRVVUlEUChEYXR1bSBYKQogCiAjZGVmaW5l IFBHX0dFVEFSR19VVUlEX1AoWCkJCURhdHVtR2V0VVVJRFAoUEdfR0VUQVJHX0RBVFVNKFgp KQogCitleHRlcm4gcGdfdXVpZF90ICpnZW5lcmF0ZV91dWlkdjcodWludDY0IHVuaXhfdHNf bXMsIHVpbnQzMiBzdWJfbXMpOworZXh0ZXJuIHBnX3V1aWRfdCAqZ2VuZXJhdGVfdXVpZHY3 X3IocGdfdXVpZF90ICp1dWlkLCB1aW50NjQgdW5peF90c19tcywgdWludDMyIHN1Yl9tcyk7 CisKKyNlbmRpZgkJCQkJCQkvKiAhRlJPTlRFTkQgKi8KICNlbmRpZgkJCQkJCQkvKiBVVUlE X0ggKi8KLS0gCjIuNDMuMAoK --------------peFmvd381bgXA0q0HjkJVA0C--