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 1wAQrY-002NXk-02 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 11:14:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAQrV-006hbk-14 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 11:14:21 +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 1wAQrU-006hba-0k for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 11:14:21 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAQrR-00000001CtD-2JgC for pgsql-hackers@postgresql.org; Wed, 08 Apr 2026 11:14:19 +0000 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-66ec3b7b1deso4965451a12.2 for ; Wed, 08 Apr 2026 04:14:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775646856; cv=none; d=google.com; s=arc-20240605; b=hvInw81IKKTRttoYSkIvp9TIgvKquvIvFheuoZcB9wIi+r9qA3DElu1gx4NFp7jf/W X7Rp226xDNiI0FCiSvlWu/eSUEKqE9aSgPMjTWedw9/bmZvzdCYNR4pUUt6rGZQdRxUB 3K9Hok+c+njMHQGp3hdwMlrpg5WdbksK0L5e39iplSS4g7wfALHzOCGtiunck4xLXIhq 8osYdnTIv6IDf5hI7aD0hEBNLhsx4S1wEqqz04poKLO5HJEwePobtTXLElYp4AvOibwY S31vARccVlxU6PW96WmxQw/MQuiPExiWqFRs7VPzmT3UP+CBglZdprA2zZ2Fe0CxOOH4 dy3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=G0gEJ82Y73IW8+0YX271MD4tVUR4GTun0YpNVowQZug=; fh=JgnnVuVQ73h2pW+6fFc1yupkL8ngAnRNFjh8Fbq4SCc=; b=RauVaDOUQziH2yiJrYIvpTf5DE/Zeu2Z6JKYQe/CMD82oqpojDrB5hUFu6bQmk6Iyh aMpZ0iLY0p/+kkGKo61uSj0UowSpP70hxVYZLhogY1i6/pC5rJuAryta0/yf0gj2u40q 0b88cYsHTTtHuc2erm1TVe95NK3oLt31aNFqo6iEAZZV+QczzikP093int5H8r7NuCUp 2EsukxScDLljZmFoiiT3ebJDAiMqj/WYoNOIUqX2+weh5K24KF0oA3xynocFf1FheEtP zArzgBuI30pjnbCSkqTrWg+XxHW+14o+/38nvRI9XO4Gm64IUo4w3sntQ7zBh+17JMyE bRZQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775646856; x=1776251656; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=G0gEJ82Y73IW8+0YX271MD4tVUR4GTun0YpNVowQZug=; b=WAecoRkmhJgK3MbX/kKn82A23oLp9dRX2uC8upIipKpEFKyBp6OlxSeyBHBM6O8qsQ 28leW3pBXL3v3EICCLdcvV01zan4BmNfnz/rekmUNzFeEAzkFEpJxdetuIS3lu2/GW+o EplDZkWf0noO3DQXvRvCJ4Fi9urzpmkLbGkxE3JYIiFPFOTdFJn6pmrCTTkWazjLzVDk IYX2LfF/r0jfuDrTlbAtvoRl3qbZ+Lag0SLGhHe96/s9/xh8CTM8XIyk5LNnMkrI4fiI 8Fp0BWrF04guhVnGYNV9mflDrmF6iz1dxz4vQDB6R/4cWrqluFqF9J+OKP2nx+PNXWUB v6TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775646856; x=1776251656; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=G0gEJ82Y73IW8+0YX271MD4tVUR4GTun0YpNVowQZug=; b=aFngA9nJdAouUK/7GjujSH7l7EwvJPNbJcsfhgG4Ugi5XYtQU6vsI0RVGpXpQwiJJT XzNqN+drhhIDcfHOPqhnK2I7iZkRnyrxGLt8cCXRBRjr6aG7yrNPryzieyW2nMCvkg6e yYzieWnhu7ZL2pfQGbsxqL7PMoI9qwY0GuoqaWE4w89xs2ef9jebYzUdF3OzMq+0e6aM 3xheCtyrvoIBwiQIMX8w1A8ztOsS0xG4ctoyJQ9Ny5pleV1Zc58PWmkhDIGICigLEU3h fa5G0Y60Leu3j4fjHMIDnTR88t+/vGaP2aicTGNyUy/2s8yzMDiaKcGYsIcBLtV3Zilw PvGg== X-Forwarded-Encrypted: i=1; AJvYcCUxObxtCyBpwqHF7yyTnZkw9ITurw+1m/7pYOMNPTaClVHRmTLLWN9k9T33gCkO7Gk38smI05LM4QB9yuFP@postgresql.org X-Gm-Message-State: AOJu0YwXmoW9Rk0HE+bEt42vwZXN3lGPtih8xJe9u0tUBcty8+h9GzsM 7YlfvPDS3jcm8RQmfGPwze8pAjnOvqtaGZTNE7AuLiyCjWh+5Wc4wuG/rryvsDQzePINppbC1RH Unmau2kVDrDbO/bF6gGNU95ZzIiCR56o= X-Gm-Gg: AeBDievZbHJ7Wn0ncFtO1X1Q4G4q6cek9gRAH7Ufv1aVYiEXiJmkyuhBCL2NIriTYqu y0iS0e9EQlRyOTXxWnz02WjMHE6xRTgUueIDBkyQjlcdniGg2oetAIgPl6BeHBhyiIpAtjYs2m2 TZFSYJWkakYXWq6gx4oixDg6IVaSY03zJKaEHYjUlILCe0GHchJ4nbFQ19P44ADMxl8nR4loZQS t3koScj8tKuEU7wJPjgsNnRb8F/1dadZ7YbjQIfGSZk7V32QeCv55E/5MlrWHUCsXeKzOJjEt87 weGckBESIus/+eQEkA== X-Received: by 2002:a05:6402:5241:b0:668:50ef:427d with SMTP id 4fb4d7f45d1cf-66e3f70d42cmr9429978a12.21.1775646855624; Wed, 08 Apr 2026 04:14:15 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Imran Zaheer Date: Wed, 8 Apr 2026 16:14:02 +0500 X-Gm-Features: AQROBzC28fEwMJk2EVmU0J1QnVOAHjU1EayqDRhKdXBfYvb8fYlgaiA0x8dNMO4 Message-ID: Subject: Re: [WIP] Pipelined Recovery To: assam258@gmail.com Cc: Xuneng Zhou , Zsolt Parragi , Jakub Wartak , "Hayato Kuroda (Fujitsu)" , pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000013c8b6064ef100c4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000013c8b6064ef100c4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi I am uploading the new version with the following fixes * Rebased version. * Skip serialization of decoded records. As pointed out by Henson, there was no need to serialize the records again for the sh_mq. We can simply pass the continuous bytes with minor pointer fixing to the sh_mq This time I am uploading the benchmarking results to drive and attaching the link here. Otherwise my mail will get holded for moderation (My guess is overall attachment size is greater than 1MB thats w= hy). I am still not sure whether my testing approach is good enough. Because sometimes I am not able to get the same performance improvement with the pgbench builtin scripts as I got with the custom sql scripts. Maybe pgbench is not creating enough WAL to test on or maybe I am missing something. Benchmarks: https://drive.google.com/file/d/1Y4SYVnrFEQRE5T2r87rrTr7SWC9m19= Si/view?usp=3Dsharing Thanks & Regards Imran Zaheer Imran Zaheer On Wed, Apr 8, 2026 at 1:46=E2=80=AFPM Imran Zaheer = wrote: > > > > > Hi Xuneng, Imran, and everyone, > > > > Hi Henson and Xuneng. > > Thanks for explaining the approaches to Xuneng. > > > > > The two approaches target different bottlenecks. The current patch > > parallelizes WAL decoding, which keeps the redo path single-threaded > > and avoids the Hot Standby visibility problem entirely. > > > > You are right both approaches > target different bottlenecks. Pipeline patch aims to improve overall > cpu throughput > and to save CPU time by offloading the steps we can safely do in parallel= with > out causing synchronization problems. > > > One thing I am curious about in the current patch: WAL records are > > already in a serialized format on disk. The producer decodes them and > > then re-serializes into a different custom format for shm_mq. What is > > the advantage of this second serialization format over simply passing > > the raw WAL bytes after CRC validation and letting the consumer decode > > directly? Offloading CRC to a separate core could still improve > > throughput at the cost of higher total CPU usage, without needing the > > custom format. > > > > Thanks. You are right there was no need to serialize the decoded record a= gain. > I was not aware that we already have continuous bytes in memory. In my > next patch > I will remove this extra serialization step. > > > Koichi's approach parallelizes redo (buffer I/O) itself, which attacks > > a larger cost =E2=80=94 Jakub's flamegraphs show BufferAlloc -> > > GetVictimBuffer -> FlushBuffer dominating in both p0 and p1 =E2=80=94 b= ut at > > the expense of much harder concurrency problems. > > > > Whether the decode pipelining ceiling is high enough, or whether the > > redo parallelization complexity is tractable, seems like the central > > design question for this area. > > I still have to investigate the problem related to `GetVictimBuffer` that > Jakub mentioned. But I was trying that how can we safely offload the work= done > by `XLogReadBufferForRedoExtended` to a separate > pipeline worker, or maybe we can try prefetching the buffer header so > the main redo > loop doesn't have to spend time getting the buffer > > Thanks for the feedback. That was helpful. > > > Regards, > Imran Zaheer --00000000000013c8b6064ef100c4 Content-Type: application/octet-stream; name="v3-0002-Pipelined-Recovery-Consumer.patch" Content-Disposition: attachment; filename="v3-0002-Pipelined-Recovery-Consumer.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpx4c5b0 RnJvbSAzMjY1ZTM5N2EzY2Q1ZGRkZTRjNTM3NmQ4Y2UyZjU1OTA4YWUwYWY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnphaGVlckBjeWJlcnRlYy5h dD4KRGF0ZTogVHVlLCA3IEFwciAyMDI2IDE0OjQwOjQ5ICswNTAwClN1YmplY3Q6IFtQQVRDSCB2 MyAyLzJdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIENvbnN1bWVyCgpUaGlzIGluY2x1ZGVzIHRoZSBj b25zdW1lci1zcGVjaWZpYyBjb2RlIGZvciB0aGUgcHJvZHVjZXItY29uc3VtZXIKYXJjaGl0ZWN0 dXJlIGZvciBXQUwgcmVwbGF5IHRoYXQgc2VwYXJhdGVzIFdBTCBkZWNvZGluZyBmcm9tIHRoZSBy ZWNvdmVyeSBwcm9jZXNzLAplbmFibGluZyBwYXJhbGxlbCBwcm9jZXNzaW5nIGJldHdlZW4gZGlm ZmVyZW50IHN0ZXBzIG9mIHJlcGxheS4KClRoZSBjb25zdW1lciByZWNlaXZlcyB0aGUgZGVjb2Rl ZCByZWNvcmQgZnJvbSB0aGUgc2hhcmVkIG1lbW9yeSBtZXNzYWdlCnF1ZXVlLiBCb3RoIHByb2R1 Y2VyIGFuZCBjb25zdW1lciBzaG91bGQgYmUgYXdhcmUgb2YgYW55IHN0YXRlIGNoYW5nZXMsCnNv IHZhcmlhYmxlIHN0YXRlcyBhcmUgc3luY2VkIHRocm91Z2ggc2hhcmVkIG1lbW9yeSBgWExvZ1Jl Y292ZXJ5Q3RsRGF0YWAuCkFsc28sIGNvbnN0YW50IHN0YXRlcyBhcmUgc2hhcmVkIGZyb20gdGhl IGNvbnN1bWVyIHRvIHRoZSBwcm9kdWNlciB1c2luZwpgV2FsUGlwZWxpbmVQYXJhbXNgLgoKQXV0 aG9yOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpJZGVhIGJ5OiBBbnRzIEFh c21hIDxhbnRzQGN5YmVydGVjLmF0PgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYyAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dw aXBlbGluZS5jICAgfCA0NTEgKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYyB8ICAgMyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ3JlY292ZXJ5LmMgICB8IDQ1NSArKysrKysrKysrKysrKysrKystLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmggICAgICAgICAgIHwgIDE2ICsKIHNyYy9pbmNsdWRlL2Fj Y2Vzcy94bG9ncmVjb3ZlcnkuaCAgICAgICAgICAgfCAgNTAgKysrCiA3IGZpbGVzIGNoYW5nZWQs IDk1MiBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKaW5kZXggMjYwZmM4MDFjZTIuLjNmYjJhZjkxM2Q4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJu YWwuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2FyY2hpdmUuaCIKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncGlwZWxpbmUuaCIKICNpbmNsdWRl ICJhY2Nlc3MveGxvZ3JlYWRlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCkBAIC02MjY5LDYgKzYyNzAsNyBAQCBTdGFy dHVwWExPRyh2b2lkKQogCiAJCQkJUHJvY0FycmF5QXBwbHlSZWNvdmVyeUluZm8oJnJ1bm5pbmcp OwogCQkJfQorCQkJU2V0U2hhcmVkSG90U3RhbmRieVN0YXRlKCk7CiAJCX0KIAogCQkvKgpAQCAt ODkyOSw2ICs4OTMxLDcgQEAgeGxvZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJ cnVubmluZy54aWRzID0geGlkczsKIAogCQkJUHJvY0FycmF5QXBwbHlSZWNvdmVyeUluZm8oJnJ1 bm5pbmcpOworCQkJU2V0U2hhcmVkSG90U3RhbmRieVN0YXRlKCk7CiAJCX0KIAogCQkvKiBDb250 cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkgYWx3YXlzIHRyYWNrcyB0aGUgbGF0ZXN0IGNrcHQgWElE ICovCkBAIC0xMDE2MSw3ICsxMDE2NCw3IEBAIEdldE9sZGVzdFJlc3RhcnRQb2ludChYTG9nUmVj UHRyICpvbGRyZWNwdHIsIFRpbWVMaW5lSUQgKm9sZHRsaSkKIHZvaWQKIFhMb2dTaHV0ZG93bldh bFJjdih2b2lkKQogewotCUFzc2VydChBbVN0YXJ0dXBQcm9jZXNzKCkgfHwgIUlzVW5kZXJQb3N0 bWFzdGVyKTsKKwlBc3NlcnQoQW1TdGFydHVwUHJvY2VzcygpIHx8ICFJc1VuZGVyUG9zdG1hc3Rl ciB8fCBBbVdhbFBpcGVsaW5lKCkpOwogCiAJU2h1dGRvd25XYWxSY3YoKTsKIAlSZXNldEluc3Rh bGxYTG9nRmlsZVNlZ21lbnRBY3RpdmUoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2dwaXBlbGluZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3BpcGVsaW5lLmMKaW5kZXggM2Y0ODJjNmJhNDQuLjJjOThiNWQ3ZGVjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYwpAQCAtNTMsNiArNTMsMTYgQEAKICNpbmNs dWRlICJ1dGlscy90aW1lb3V0LmgiCiAKIAorLyoKKyAqIENvbnZlcnQgdmFsdWVzIG9mIEdVQ3Mg bWVhc3VyZWQgaW4gbWVnYWJ5dGVzIHRvIGJ5dGVzCisgKi8KKyNkZWZpbmUgTUJUb0J5dGVzKG1i dmFyKSAobWJ2YXIgKiAxMDI0ICogMTAyNCkKKworLyoKKyAqIFdhaXRpbmcgZm9yIGNvbnN1bWVy IGJlZm9yZSBleGl0aW5nIGdyYWNlZnVsbHkuCisgKi8KKyNkZWZpbmUgTUFYX1NIVVRET1dOX1dB SVRfSVRFUlMgMTAwMAkvKiAxMDAwICogMTBtcyA9IDEwIHNlY29uZHMgKi8KKwogCiAvKiBHbG9i YWwgc2hhcmVkIG1lbW9yeSBjb250cm9sIHN0cnVjdHVyZSAqLwogV2FsUGlwZWxpbmVTaG1DdGwg KldhbFBpcGVsaW5lU2htID0gTlVMTDsKQEAgLTcyLDYgKzgyLDEwIEBAIHN0YXRpYyBkc21fc2Vn bWVudCAqcHJvZHVjZXJfZHNtX3NlZyA9IE5VTEw7CiBzdGF0aWMgc2htX21xICpwcm9kdWNlcl9t cSA9IE5VTEw7CiBzdGF0aWMgc2htX21xX2hhbmRsZSAqcHJvZHVjZXJfbXFfaGFuZGxlID0gTlVM TDsKIAorLyogTG9jYWwgc3RhdGUgZm9yIGNvbnN1bWVyICovCitzdGF0aWMgZHNtX3NlZ21lbnQg KmNvbnN1bWVyX2RzbV9zZWcgPSBOVUxMOworc3RhdGljIHNobV9tcSAqY29uc3VtZXJfbXEgPSBO VUxMOworc3RhdGljIHNobV9tcV9oYW5kbGUgKmNvbnN1bWVyX21xX2hhbmRsZSA9IE5VTEw7CiAK IC8qCiAgKiBGbGFncyBzZXQgYnkgaW50ZXJydXB0IGhhbmRsZXJzIGZvciBsYXRlciBzZXJ2aWNl IGluIHRoZSByZWRvIGxvb3AuCkBAIC04NCw4ICs5OCwxMCBAQCBzdGF0aWMgdm9pZCBQaXBlbGlu ZUJnd1NpZ0h1cEhhbmRsZXIoU0lHTkFMX0FSR1MpOwogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMg Ki8KIHN0YXRpYyB2b2lkIHdhbF9waXBlbGluZV9jbGVhbnVwX2NhbGxiYWNrKGludCBjb2RlLCBE YXR1bSBhcmcpOwogc3RhdGljIFNpemUgc2VyaWFsaXplX3dhbF9yZWNvcmQoWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQsIGNoYXIgKipidWZmZXIpOworc3RhdGljIERlY29kZWRYTG9nUmVjb3JkICpk ZXNlcmlhbGl6ZV93YWxfcmVjb3JkKGNvbnN0IGNoYXIgKmJ1ZmZlciwgU2l6ZSBsZW4sIFhMb2dS ZWFkZXJTdGF0ZSAqc3RhcnR1cF9yZWFkZXIsIGJvb2wgZmlyc3RfaXRlcmF0aW9uKTsKIHN0YXRp YyB2b2lkIGNsZWFudXBfcHJvZHVjZXJfcmVzb3VyY2VzKHZvaWQpOwogc3RhdGljIHZvaWQgY2xl YW51cF9jb25zdW1lcl9yZXNvdXJjZXModm9pZCk7CitzdGF0aWMgdm9pZCBXYWxQaXBlbGluZV9X YWl0Rm9yQ29uc3VtZXJTaHV0ZG93blJlcXVlc3Qodm9pZCk7CiAKIC8qIGNvcGllZCBmcm9tIHhs b2dyZWNvdmVyeS5jICovCiAvKiBQYXJhbWV0ZXJzIHBhc3NlZCBkb3duIGZyb20gUmVhZFJlY29y ZCB0byB0aGUgWExvZ1BhZ2VSZWFkIGNhbGxiYWNrLiAqLwpAQCAtMTE4LDYgKzEzNCwxNjggQEAg V2FsUGlwZWxpbmVTaG1lbUluaXQodm9pZCAqYXJnKQogCVNwaW5Mb2NrSW5pdCgmV2FsUGlwZWxp bmVTaG0tPm11dGV4KTsKIH0KIAorLyoKKyAqIENhbGxlZCBieSBDb25zdW1lci4KKyAqCisgKiBJ bml0aWFsaXplIGFuZCBzdGFydCB0aGUgV0FMIHBpcGVsaW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVk IGJ5IHRoZSBzdGFydHVwCisgKiBwcm9jZXNzIChjb25zdW1lcikgYXMgYSByZXF1ZXN0IHRvIHN0 YXJ0IHRoZSBwaXBlbGluZS4KKyAqLwordm9pZAorV2FsUGlwZWxpbmVfU3RhcnQoV2FsUGlwZWxp bmVQYXJhbXMgKnBhcmFtcykKK3sKKwlCYWNrZ3JvdW5kV29ya2VyIHdvcmtlcjsKKwlCYWNrZ3Jv dW5kV29ya2VySGFuZGxlICpoYW5kbGU7CisJZHNtX3NlZ21lbnQgKnNlZzsKKwlzaG1fdG9jX2Vz dGltYXRvciBlOworCXNobV90b2MgKnRvYzsKKwlTaXplICAgICAgICBzZWdzaXplOworCXNobV9t cSAgICAgKm1xOworCVdhbFBpcGVsaW5lUGFyYW1zICpzaGFyZWRfcGFyYW1zOworCXBpZF90CQlw aWQ7CisJQmd3SGFuZGxlU3RhdHVzIHN0YXR1czsKKworCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlw ZWxpbmVTaG0tPm11dGV4KTsKKwlpZiAoV2FsUGlwZWxpbmVTaG0tPmluaXRpYWxpemVkKQorCXsK KwkJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCQlyZXR1cm47ICAv KiBBbHJlYWR5IHN0YXJ0ZWQgKi8KKwl9CisJV2FsUGlwZWxpbmVTaG0tPmluaXRpYWxpemVkID0g dHJ1ZTsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwlzaG1f dG9jX2luaXRpYWxpemVfZXN0aW1hdG9yKCZlKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZl LCBzaXplb2YoV2FsUGlwZWxpbmVQYXJhbXMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZl LCBNQlRvQnl0ZXMod2FsX3BpcGVsaW5lX21xX3NpemVfbWIpKTsKKwlzaG1fdG9jX2VzdGltYXRl X2tleXMoJmUsIDIpOyAgIC8qIGtleT0xIOKGkiBwYXJhbXMsIGtleT0yIOKGkiBtcSAqLworCXNl Z3NpemUgPSBzaG1fdG9jX2VzdGltYXRlKCZlKTsKKworCXNlZyA9IGRzbV9jcmVhdGUoc2Vnc2l6 ZSwgMCk7CisJZHNtX3Bpbl9zZWdtZW50KHNlZyk7CisKKwl0b2MgPSBzaG1fdG9jX2NyZWF0ZShQ R19XQUxfUElQRUxJTkVfTUFHSUMsCisJCQkJCQkgZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpLCBz ZWdzaXplKTsKKworCS8qCisJICogUGFzcyB0aGUgc3RhcnR1cCBwcm9jZXNzIHZhYXJhaWJsZXMg c3RhdGUgdGhyb3VnaCBXYWxQaXBlbGluZVBhcmFtcworCSAqLworCXNoYXJlZF9wYXJhbXMgPSBz aG1fdG9jX2FsbG9jYXRlKHRvYywgc2l6ZW9mKFdhbFBpcGVsaW5lUGFyYW1zKSk7CisJc2htX3Rv Y19pbnNlcnQodG9jLCAxLCBzaGFyZWRfcGFyYW1zKTsKKwkqc2hhcmVkX3BhcmFtcyA9ICpwYXJh bXM7CisKKwkvKiBjcmVhdGUgdGhlIG1lc3NhZ2UgcXVldWUgKi8KKwltcSA9IHNobV9tcV9jcmVh dGUoc2htX3RvY19hbGxvY2F0ZSh0b2MsIE1CVG9CeXRlcyh3YWxfcGlwZWxpbmVfbXFfc2l6ZV9t YikpLAorCQkJCQkgICBNQlRvQnl0ZXMod2FsX3BpcGVsaW5lX21xX3NpemVfbWIpKTsKKwlzaG1f dG9jX2luc2VydCh0b2MsIDIsIG1xKTsKKworCS8qIHVwZGF0ZSBzaGFyZWQgc3RhdGUgKi8KKwlT cGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJV2FsUGlwZWxpbmVTaG0t PmRzbV9zZWdfaGFuZGxlID0gZHNtX3NlZ21lbnRfaGFuZGxlKHNlZyk7CisJV2FsUGlwZWxpbmVT aG0tPmNvbnN1bWVyX3BpZCA9IE15UHJvY1BpZDsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVs aW5lU2htLT5tdXRleCk7CisKKwkvKiBTZXQgdXAgY29uc3VtZXIgc2lkZSBvZiB0aGUgcXVldWUg Ki8KKwljb25zdW1lcl9kc21fc2VnID0gc2VnOworCWNvbnN1bWVyX21xID0gbXE7CisJc2htX21x X3NldF9yZWNlaXZlcihjb25zdW1lcl9tcSwgTXlQcm9jKTsKKwljb25zdW1lcl9tcV9oYW5kbGUg PSBzaG1fbXFfYXR0YWNoKGNvbnN1bWVyX21xLCBzZWcsIE5VTEwpOworCisJLyogUmVnaXN0ZXIg Y2xlYW51cCBjYWxsYmFjayAqLworCWJlZm9yZV9zaG1lbV9leGl0KHdhbF9waXBlbGluZV9jbGVh bnVwX2NhbGxiYWNrLCAoRGF0dW0pIDApOworCisJLyogUmVnaXN0ZXIgYmFja2dyb3VuZCB3b3Jr ZXIgKi8KKwltZW1zZXQoJndvcmtlciwgMCwgc2l6ZW9mKHdvcmtlcikpOworCXdvcmtlci5iZ3df ZmxhZ3MgPSBCR1dPUktFUl9TSE1FTV9BQ0NFU1M7CisJd29ya2VyLmJnd19zdGFydF90aW1lID0g QmdXb3JrZXJTdGFydF9Qb3N0bWFzdGVyU3RhcnQ7CisJd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUg PSBCR1dfTkVWRVJfUkVTVEFSVDsKKwlzcHJpbnRmKHdvcmtlci5iZ3dfbGlicmFyeV9uYW1lLCAi cG9zdGdyZXMiKTsKKwlzcHJpbnRmKHdvcmtlci5iZ3dfZnVuY3Rpb25fbmFtZSwgIldhbFBpcGVs aW5lX1Byb2R1Y2VyTWFpbiIpOworCXNucHJpbnRmKHdvcmtlci5iZ3dfbmFtZSwgQkdXX01BWExF TiwgIndhbCBwaXBlbGluZSBwcm9kdWNlciIpOworCXNucHJpbnRmKHdvcmtlci5iZ3dfdHlwZSwg QkdXX01BWExFTiwgIndhbCBwaXBlbGluZSBwcm9kdWNlciIpOworCXdvcmtlci5iZ3dfbWFpbl9h cmcgPSBVSW50MzJHZXREYXR1bShkc21fc2VnbWVudF9oYW5kbGUoc2VnKSk7CisJd29ya2VyLmJn d19ub3RpZnlfcGlkID0gTXlQcm9jUGlkOworCisJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3Jv dW5kV29ya2VyKCZ3b3JrZXIsICZoYW5kbGUpKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZXYWxQ aXBlbGluZVNobS0+bXV0ZXgpOworCQlXYWxQaXBlbGluZVNobS0+aW5pdGlhbGl6ZWQgPSBmYWxz ZTsKKwkJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCisJCWRzbV91 bnBpbl9zZWdtZW50KGRzbV9zZWdtZW50X2hhbmRsZShzZWcpKTsKKwkJZHNtX2RldGFjaChzZWcp OworCQljb25zdW1lcl9kc21fc2VnID0gTlVMTDsKKwkJY29uc3VtZXJfbXEgPSBOVUxMOworCQlj b25zdW1lcl9tcV9oYW5kbGUgPSBOVUxMOworCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBu b3QgcmVnaXN0ZXIgYmFja2dyb3VuZCB3b3JrZXIgZm9yIFdBTCBwaXBlbGluZSIpKSk7CisJfQor CisJc3RhdHVzID0gV2FpdEZvckJhY2tncm91bmRXb3JrZXJTdGFydHVwKGhhbmRsZSwgJnBpZCk7 CisKKwlpZiAoc3RhdHVzICE9IEJHV0hfU1RBUlRFRCkKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTKSwKKwkJCQllcnJtc2coImNvdWxk IG5vdCBzdGFydCBiYWNrZ3JvdW5kIHByb2Nlc3MiKSwKKwkJCQllcnJoaW50KCJNb3JlIGRldGFp bHMgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgc2VydmVyIGxvZy4iKSkpOworCWVsc2UKKwkJZXJl cG9ydChMT0csIChlcnJtc2coIlt3YWxwaXBlbGluZV0gc3RhcnRlZC4iKSkpOworfQorCisvKgor ICogUmVxdWVzdCBwcm9kdWNlciBzaHV0ZG93bi4KKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBj b25zdW1lciB3aGVuIGl0IG5vIGxvbmdlciBuZWVkcyByZWNvcmRzLgorICovCitzdGF0aWMgdm9p ZAorV2FsUGlwZWxpbmVfUmVxdWVzdFNodXRkb3duKHZvaWQpCit7CisJaWYgKCFXYWxQaXBlbGlu ZVNobSkKKwkJcmV0dXJuOworCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0 ZXgpOworCVdhbFBpcGVsaW5lU2htLT5zaHV0ZG93bl9yZXF1ZXN0ZWQgPSB0cnVlOworCVNwaW5M b2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKK30KKworLyoKKyAqIENvbnN1bWVy IEZ1bmN0aW9uLgorICogU3RvcCB0aGUgV0FMIHBpcGVsaW5lLiBUaGlzIHdpbGwgYWxzbyBiZSBj YWxsZWQgYmUgdGhlIHN0YXJ0dXAgcHJvY2VzcworICogKGNvbnN1bWVyKS4gVGhpcyB3aWxsIG9u bHkgYmUgY2FsbGVkIHdoZW4gY29uc3VtZXIgZG9uJ3QgbmVlZCBhbnkgbW9yZQorICogZGVjb2Rl ZCByZWNvcmRzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyB3YWl0IHVudGlsIHRoZSBwaXBlbGlu ZSB3b3JrZXJzCisgKiBhcmUgc3RvcHBlZC4KKyAqLwordm9pZAorV2FsUGlwZWxpbmVfU3RvcCh2 b2lkKQoreworCWlmICghV2FsUGlwZWxpbmVTaG0gfHwgIVdhbFBpcGVsaW5lU2htLT5pbml0aWFs aXplZCkKKwkJcmV0dXJuOworCisJLyogQXNrIHByb2R1Y2VyIHRvIHN0b3AgKi8KKwlXYWxQaXBl bGluZV9SZXF1ZXN0U2h1dGRvd24oKTsKKworCS8qIFdhaXQgZm9yIHByb2R1Y2VyIHRvIGV4aXQg KG1heCAxMCBzZWNvbmRzKSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspCisJewor CQlib29sIHByb2R1Y2VyX2FsaXZlOworCisJCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVT aG0tPm11dGV4KTsKKwkJcHJvZHVjZXJfYWxpdmUgPSAoV2FsUGlwZWxpbmVTaG0tPnByb2R1Y2Vy X3BpZCAhPSAwKTsKKwkJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOwor CisJCWlmICghcHJvZHVjZXJfYWxpdmUpCisJCQlicmVhazsKKworCQlwZ191c2xlZXAoMTAwMDAw KTsgLyogMTAwIG1zICovCisJfQorCisJY2xlYW51cF9jb25zdW1lcl9yZXNvdXJjZXMoKTsKKwor CVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwlXYWxQaXBlbGluZVNo bS0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2ht LT5tdXRleCk7CisKKwllbG9nKExPRywgIlt3YWxwaXBlbGluZV0gc3RvcHBlZCIpOworfQogCiAv KgogICogUHJvZHVjZXIgRnVuY3Rpb24uCkBAIC0zNTcsNiArNTM1LDExNiBAQCBXYWxQaXBlbGlu ZV9TZW5kRXJyb3IoaW50IGVycmNvZGUsIGNvbnN0IGNoYXIgKmVycm1zZykKIAlyZXR1cm4gdHJ1 ZTsKIH0KIAorLyoKKyAqIENvbnN1bWVyIEZ1bmN0aW9uLgorICogUmVjZWl2ZSBhbmQgZGVzZXJp YWxpemUgYSBXQUwgcmVjb3JkIGZyb20gdGhlIHByb2R1Y2VyCisgKi8KK0RlY29kZWRYTG9nUmVj b3JkICoKK1dhbFBpcGVsaW5lX1JlY2VpdmVSZWNvcmQoWExvZ1JlYWRlclN0YXRlICpzdGFydHVw X3JlYWRlciwgYm9vbCBmaXJzdF9pdGVyYXRpb24pCit7CisJc2htX21xX3Jlc3VsdCByZXM7CisJ U2l6ZSAgICAgICAgbmJ5dGVzOworCXZvaWQgICAgICAgKmRhdGE7CisJY2hhciAgICAgICAqZXJy X21zZzsKKwlpbnQgICAgICAgIGVycl9jb2RlOworCVdhbFJlY29yZE1zZ0hlYWRlciAqaGRyOwor CURlY29kZWRYTG9nUmVjb3JkICpyZWNvcmQ7CisKKwlpZiAoIWNvbnN1bWVyX21xX2hhbmRsZSkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKiBSZWNlaXZlIG1lc3NhZ2UgZnJvbSBxdWV1ZSAqLworCXJl cyA9IHNobV9tcV9yZWNlaXZlKGNvbnN1bWVyX21xX2hhbmRsZSwgJm5ieXRlcywgJmRhdGEsIGZh bHNlKTsKKworCWlmIChyZXMgIT0gU0hNX01RX1NVQ0NFU1MpCisJCWVsb2coRVJST1IsICJbd2Fs cGlwZWxpbmVdIGNvbnN1bWVyOiBmYWlsZWQgdG8gcmVjZWl2ZSByZWNvcmQiKTsKKworCWhkciA9 IChXYWxSZWNvcmRNc2dIZWFkZXIgKikgZGF0YTsKKworCS8qIEhhbmRsZSBkaWZmZXJlbnQgbWVz c2FnZSB0eXBlcyAqLworCXN3aXRjaCAoaGRyLT5tc2dfdHlwZSkKKwl7CisJCWNhc2UgV0FMX01T R19SRUNPUkQ6CisJCQlyZWNvcmQgPSBkZXNlcmlhbGl6ZV93YWxfcmVjb3JkKChjaGFyICopIGRh dGEsIG5ieXRlcywgc3RhcnR1cF9yZWFkZXIsIGZpcnN0X2l0ZXJhdGlvbik7CisKKwkJCS8qIFVw ZGF0ZSBzdGF0aXN0aWNzICovCisJCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5t dXRleCk7CisJCQlXYWxQaXBlbGluZVNobS0+cmVjb3Jkc19yZWNlaXZlZCsrOworCQkJV2FsUGlw ZWxpbmVTaG0tPmJ5dGVzX3JlY2VpdmVkICs9IG5ieXRlczsKKwkJCVdhbFBpcGVsaW5lU2htLT5j b25zdW1lcl9sc24gPSBoZHItPmVuZFJlY1B0cjsKKwkJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlw ZWxpbmVTaG0tPm11dGV4KTsKKworCQkJcmV0dXJuIHJlY29yZDsKKworCQljYXNlIFdBTF9NU0df U0hVVERPV046CisJCQllbG9nKExPRywgIlt3YWxwaXBlbGluZV0gY29uc3VtZXI6IHJlY2VpdmVk IHNodXRkb3duIG1lc3NhZ2UgZnJvbSB0aGUgcHJvZHVjZXIiKTsKKwkJCXJldHVybiBOVUxMOwor CisJCWNhc2UgV0FMX01TR19FUlJPUjoKKwkJCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVT aG0tPm11dGV4KTsKKwkJCWVycl9jb2RlID0gV2FsUGlwZWxpbmVTaG0tPmVycm9yX2NvZGU7CisJ CQllcnJfbXNnID0gV2FsUGlwZWxpbmVTaG0tPmVycm9yX21lc3NhZ2U7CisJCQlTcGluTG9ja1Jl bGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKGVycl9jb2RlKSwKKwkJCQkJIGVycm1zZygiW3dhbHBpcGVsaW5lXSBjb25zdW1l cjogcmVjZWl2ZWQgZXJyb3IgZnJvbSB0aGUgcHJvZHVjZXI6ICVzIiwgZXJyX21zZykpKTsKKwkJ CXJldHVybiBOVUxMOworCisJCWRlZmF1bHQ6CisJCQllbG9nKFBBTklDLCAiW3dhbHBpcGVsaW5l XSBjb25zdW1lcjogdW5rbm93biBtZXNzYWdlIHR5cGU6ICVkIiwKKwkJCQkgaGRyLT5tc2dfdHlw ZSk7CisJCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBDb25zdW1lciBGdW5jdGlvbi4K KyAqIENoZWNrIGlmIHByb2R1Y2VyIGlzIHN0aWxsIHJ1bm5pbmcKKyAqLworYm9vbAorV2FsUGlw ZWxpbmVfQ2hlY2tQcm9kdWNlckFsaXZlKHZvaWQpCit7CisJcGlkX3QgICAgICAgcGlkOworCWJv b2wgICAgICAgIGFsaXZlOworCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0 ZXgpOworCXBpZCA9IFdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9waWQ7CisJU3BpbkxvY2tSZWxl YXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCisJaWYgKHBpZCA9PSAwKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlhbGl2ZSA9IChraWxsKHBpZCwgMCkgPT0gMCk7CisKKwlpZiAoIWFsaXZlKQor CXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCQlXYWxQaXBl bGluZVNobS0+cHJvZHVjZXJfcGlkID0gMDsKKwkJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGlu ZVNobS0+bXV0ZXgpOworCX0KKworCXJldHVybiBhbGl2ZTsKK30KKworLyoKKyAqIENvbnN1bWVy IEZ1bmN0aW9uLgorICogQ2hlY2sgaWYgcGlwZWxpbmUgaXMgYWN0aXZlCisgKi8KK2Jvb2wKK1dh bFBpcGVsaW5lX0lzQWN0aXZlKHZvaWQpCit7CisJYm9vbCAgICAgICAgYWN0aXZlOworCisJaWYg KCFXYWxQaXBlbGluZVNobSkKKwkJcmV0dXJuIGZhbHNlOworCisJU3BpbkxvY2tBY3F1aXJlKCZX YWxQaXBlbGluZVNobS0+bXV0ZXgpOworCWFjdGl2ZSA9IFdhbFBpcGVsaW5lU2htLT5pbml0aWFs aXplZCAmJiAhV2FsUGlwZWxpbmVTaG0tPnNodXRkb3duX3JlcXVlc3RlZDsKKwlTcGluTG9ja1Jl bGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwlyZXR1cm4gYWN0aXZlOworfQogCiAv KgogICogUHJvZHVjZXIgRnVuY3Rpb24uCkBAIC0zOTUsNiArNjgzLDU1IEBAIFdhbFBpcGVsaW5l X1dhaXRGb3JDb25zdW1lclNodXRkb3duUmVxdWVzdCh2b2lkKQogCX0KIH0KIAorLyoKKyAqIENv bnN1bWVyIEZ1bmN0aW9uLgorICogV2FpdCB1bmxlc3MgbGFzdCBzZW50IHJlY29yZCBieSB0aGUg cGlwZWxpbmUgaXMgYXBwbGllZCBieSB0aGUKKyAqIHN0YXJ0dXAgcHJvY2Vzcy4KKyAqLwordm9p ZAorV2FsUGlwZWxpbmVfV2FpdEZvckNvbnN1bWVyQ2F0Y2h1cCh2b2lkKQoreworCVhMb2dSZWNQ dHIgcHJvZHVjZXJfbHNuOworCVhMb2dSZWNQdHIgY29uc3VtZXJfbHNuOworCisJZm9yICg7OykK Kwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwkJcHJvZHVj ZXJfbHNuID0gV2FsUGlwZWxpbmVTaG0tPnByb2R1Y2VyX2xzbjsKKwkJY29uc3VtZXJfbHNuID0g V2FsUGlwZWxpbmVTaG0tPmFwcGxpZWRfbHNuOworCQlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVs aW5lU2htLT5tdXRleCk7CisKKwkJaWYgKHByb2R1Y2VyX2xzbiA9PSBjb25zdW1lcl9sc24pCisJ CQlyZXR1cm47CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBzaG9ydCBzbGVl cCB0byBhdm9pZCBidXN5IGxvb3BpbmcgKi8KKwkJcGdfdXNsZWVwKDUwKTsgICAvKiA1MCBtaWNy b3NlY29uZHMgKi8KKwl9Cit9CisKKy8qCisgKiBDb25zdW1lciBGdW5jdGlvbi4KKyAqIEdldCBw aXBlbGluZSBzdGF0aXN0aWNzCisgKi8KK3ZvaWQKK1dhbFBpcGVsaW5lX0dldFN0YXRzKHVpbnQ2 NCAqcmVjb3Jkc19zZW50LCB1aW50NjQgKnJlY29yZHNfcmVjZWl2ZWQsCisJCQkJCSBYTG9nUmVj UHRyICpwcm9kdWNlcl9sc24sIFhMb2dSZWNQdHIgKmNvbnN1bWVyX2xzbikKK3sKKwlTcGluTG9j a0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwlpZiAocmVjb3Jkc19zZW50KQor CQkqcmVjb3Jkc19zZW50ID0gV2FsUGlwZWxpbmVTaG0tPnJlY29yZHNfc2VudDsKKwlpZiAocmVj b3Jkc19yZWNlaXZlZCkKKwkJKnJlY29yZHNfcmVjZWl2ZWQgPSBXYWxQaXBlbGluZVNobS0+cmVj b3Jkc19yZWNlaXZlZDsKKwlpZiAocHJvZHVjZXJfbHNuKQorCQkqcHJvZHVjZXJfbHNuID0gV2Fs UGlwZWxpbmVTaG0tPnByb2R1Y2VyX2xzbjsKKwlpZiAoY29uc3VtZXJfbHNuKQorCQkqY29uc3Vt ZXJfbHNuID0gV2FsUGlwZWxpbmVTaG0tPmNvbnN1bWVyX2xzbjsKKworCVNwaW5Mb2NrUmVsZWFz ZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKK30KIAogCiAvKgpAQCAtNDU0LDYgKzc5MSw5NCBA QCBzZXJpYWxpemVfd2FsX3JlY29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIGNoYXIg KipvdXRidWYpCiAJcmV0dXJuIHRvdGFsOwogfQogCisvKgorICogZGVzZXJpYWxpemVfd2FsX3Jl Y29yZCAoQ29uc3VtZXIpCisgKgorICogVW5wYWNrIGEgYnVmZmVyIHByb2R1Y2VkIGJ5IHNlcmlh bGl6ZV93YWxfcmVjb3JkLCByZXN0b3JlIGludGVyaW9yCisgKiBvZmZzZXRzIHRvIHBvaW50ZXJz LCBhbmQgYXR0YWNoIHRoZSByZWNvcmQgdG8gdGhlIHN0YXJ0dXAgcmVhZGVyLgorICovCitEZWNv ZGVkWExvZ1JlY29yZCAqCitkZXNlcmlhbGl6ZV93YWxfcmVjb3JkKGNvbnN0IGNoYXIgKmJ1Ziwg U2l6ZSBsZW4sCisJCQkJCSAgIFhMb2dSZWFkZXJTdGF0ZSAqc3RhcnR1cF9yZWFkZXIsIGJvb2wg Zmlyc3RfaXRlcmF0aW9uKQoreworCVdhbFJlY29yZE1zZ0hlYWRlciBoZHI7CisJRGVjb2RlZFhM b2dSZWNvcmQgKmRlYzsKKworCWlmIChsZW4gPCBzaXplb2YoaGRyKSkKKwkJcmV0dXJuIE5VTEw7 CisKKwltZW1jcHkoJmhkciwgYnVmLCBzaXplb2YoaGRyKSk7CisKKwlpZiAoaGRyLmRlY29kZWRf c2l6ZSAhPSBsZW4gLSBzaXplb2YoaGRyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkZWMgPSBwYWxs b2MoaGRyLmRlY29kZWRfc2l6ZSk7CisJbWVtY3B5KGRlYywgYnVmICsgc2l6ZW9mKGhkciksIGhk ci5kZWNvZGVkX3NpemUpOworCisJLyoKKwkgKiBSZXN0b3JlIGludGVyaW9yIHBvaW50ZXJzIGZy b20gb2Zmc2V0cy4KKwkgKiBPZmZzZXQgMCBtZWFucyB0aGUgb3JpZ2luYWwgcG9pbnRlciB3YXMg TlVMTC4KKwkgKi8KKwlpZiAoZGVjLT5tYWluX2RhdGFfbGVuID4gMCkKKwkJZGVjLT5tYWluX2Rh dGEgPSAoY2hhciAqKWRlYyArIChwdHJkaWZmX3QpZGVjLT5tYWluX2RhdGE7CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8PSBkZWMtPm1heF9ibG9ja19pZDsgaSsrKQorCXsKKwkJRGVjb2RlZEJrcEJs b2NrICpibGsgPSAmZGVjLT5ibG9ja3NbaV07CisJCWlmICghYmxrLT5pbl91c2UpCisJCQljb250 aW51ZTsKKwkJaWYgKGJsay0+aGFzX2RhdGEpCisJCQlibGstPmRhdGEgPSAoY2hhciAqKWRlYyAr IChwdHJkaWZmX3QpYmxrLT5kYXRhOworCQlpZiAoYmxrLT5oYXNfaW1hZ2UpCisJCQlibGstPmJr cF9pbWFnZSA9IChjaGFyICopZGVjICsgKHB0cmRpZmZfdClibGstPmJrcF9pbWFnZTsKKwl9CisK KwkvKiBjbGVhciB0aGUgcXVldWUgbGluayDigJQgaXQgYmVsb25ncyB0byB0aGUgcHJvZHVjZXIn cyBxdWV1ZSAqLworCWRlYy0+bmV4dCA9IE5VTEw7CisKKwkvKgorCSAqIFRoZSBwcmV2aW91cyBk ZWNvZGVkIHJlY29yZCBoYXMgYmVlbiBkZXNlcmlhbGl6ZWQgZnJvbQorCSAqIGZyb20gdGhlIHBp cGVsaW5lIGFuZCBoZW5jZSBuZWVkIHRvIGZyZWUgdGhlIG1lbW9yeSBhZnRlcgorCSAqIHVzZS4K KwkgKgorCSAqIEJ1dCBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbiBtZW1vcnkgc3BhY2UgZm9yIGBy ZWFkZXItPnJlY29yZGAKKwkgKiB3YXMgYWxsb2NhdGVkIGZyb20gdGhlIGBkZWNvZGVfYnVmZmVy YCwgYW5kIGZyZWVpbmcgdGhpcworCSAqIG1lbW9yeSBjYW4gYmUgZmF0YWwuIFRoaXMgbWVtb3J5 IHdpbGwgYmUgZnJlZWQgYXV0b21hdGljYWxseQorCSAqIGF0IHRoZSBlbmQgb2YgdGhlIHJlY292 ZXJ5IGluIGBmaW5pc2h3YWxyZWNvdmVyeSgpYC4gU28gd2UKKwkgKiB3aWxsIHNraXAgcGZyZWUg Zm9yIHRoZSBmaXJzdCBpdGVyYXRpb24gKG1haW4gcmVkbyBsb29wKS4KKwkgKi8KKwlpZiAoc3Rh cnR1cF9yZWFkZXItPnJlY29yZCAmJiAhZmlyc3RfaXRlcmF0aW9uKQorCQlwZnJlZShzdGFydHVw X3JlYWRlci0+cmVjb3JkKTsKKworCS8qIEF0dGFjaCB0byByZWFkZXIsIG9ubHkgdXBkYXRpbmcg dGhlIHB1YmxpYyBwYXJhbWV0ZXJzICovCisJc3RhcnR1cF9yZWFkZXItPnJlY29yZCAgICAgICAg ICAgID0gZGVjOworCXN0YXJ0dXBfcmVhZGVyLT5SZWFkUmVjUHRyICAgICAgICA9IGRlYy0+bHNu OworCXN0YXJ0dXBfcmVhZGVyLT5EZWNvZGVSZWNQdHIgICAgICA9IGRlYy0+bHNuOworCXN0YXJ0 dXBfcmVhZGVyLT5FbmRSZWNQdHIgICAgICAgICA9IGRlYy0+bmV4dF9sc247CisJc3RhcnR1cF9y ZWFkZXItPk5leHRSZWNQdHIgICAgICAgID0gZGVjLT5uZXh0X2xzbjsKKwlzdGFydHVwX3JlYWRl ci0+ZGVjb2RlX3F1ZXVlX2hlYWQgPSBkZWM7CisJc3RhcnR1cF9yZWFkZXItPmRlY29kZV9xdWV1 ZV90YWlsID0gZGVjOworCXN0YXJ0dXBfcmVhZGVyLT5taXNzaW5nQ29udHJlY1B0ciA9IGhkci5t aXNzaW5nQ29udHJlY1B0cjsKKwlzdGFydHVwX3JlYWRlci0+YWJvcnRlZFJlY1B0ciAgICAgPSBo ZHIuYWJvcnRlZFJlY1B0cjsKKwlzdGFydHVwX3JlYWRlci0+b3ZlcndyaXR0ZW5SZWNQdHIgPSBo ZHIub3ZlcndyaXR0ZW5SZWNQdHI7CisKKwlyZXR1cm4gZGVjOworfQorCisvKgorICogV2UgbmVl ZCB0byBwdXQgc29tZSBhc3NlcnRpb24gdGhhdCBvbmx5IHBpcGVsaW5lIHdvcmtlciBzaG91bGQg YmUgdG91Y2hpbmcKKyAqIHRoZSBzcGVjaWZpYyBjb2RlLgorICovCitib29sIEFtV2FsUGlwZWxp bmUodm9pZCkKK3sKKwlpZiAoTXlCYWNrZW5kVHlwZSA9PSBCX0JHX1dPUktFUiAmJiBNeUJnd29y a2VyRW50cnkpCisJeworCQlpZiAoc3RybmNtcChNeUJnd29ya2VyRW50cnktPmJnd19uYW1lLCAi d2FsIHBpcGVsaW5lIiwgMTIpID09IDApCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4g ZmFsc2U7Cit9CiAKIC8qCiAgKiBDbGVhbiB1cCBwcm9kdWNlci1zaWRlIHJlc291cmNlcwpAQCAt NDgxLDYgKzkwNiwzMiBAQCBjbGVhbnVwX3Byb2R1Y2VyX3Jlc291cmNlcyh2b2lkKQogCVNwaW5M b2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKIH0KIAorLyoKKyAqIENsZWFuIHVw IGNvbnN1bWVyLXNpZGUgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyB2b2lkCitjbGVhbnVwX2NvbnN1 bWVyX3Jlc291cmNlcyh2b2lkKQoreworCWlmIChjb25zdW1lcl9tcV9oYW5kbGUpCisJeworCQlz aG1fbXFfZGV0YWNoKGNvbnN1bWVyX21xX2hhbmRsZSk7CisJCWNvbnN1bWVyX21xX2hhbmRsZSA9 IE5VTEw7CisJfQorCisJaWYgKGNvbnN1bWVyX2RzbV9zZWcpCisJeworCQlkc21fdW5waW5fc2Vn bWVudChkc21fc2VnbWVudF9oYW5kbGUoY29uc3VtZXJfZHNtX3NlZykpOworCQlkc21fZGV0YWNo KGNvbnN1bWVyX2RzbV9zZWcpOworCQljb25zdW1lcl9kc21fc2VnID0gTlVMTDsKKwl9CisKKwlj b25zdW1lcl9tcSA9IE5VTEw7CisKKwlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5t dXRleCk7CisJV2FsUGlwZWxpbmVTaG0tPmNvbnN1bWVyX3BpZCA9IDA7CisJV2FsUGlwZWxpbmVT aG0tPmRzbV9zZWdfaGFuZGxlID0gRFNNX0hBTkRMRV9JTlZBTElEOworCVNwaW5Mb2NrUmVsZWFz ZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKK30KIAogLyoKICAqIENsZWFudXAgY2FsbGJhY2sg Zm9yIHByb2Nlc3MgZXhpdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3ByZWZldGNoZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRj aGVyLmMKaW5kZXggODNhM2Y5N2E1N2MuLmUzNzhiNjQ2NTU3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1 ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3BpcGVsaW5lLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hsb2dwcmVmZXRjaGVyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFk ZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKQEAgLTM1NSw3ICszNTYsNyBA QCBYTG9nUHJlZmV0Y2hSZWNvbmZpZ3VyZSh2b2lkKQogc3RhdGljIGlubGluZSB2b2lkCiBYTG9n UHJlZmV0Y2hJbmNyZW1lbnQocGdfYXRvbWljX3VpbnQ2NCAqY291bnRlcikKIHsKLQlBc3NlcnQo QW1TdGFydHVwUHJvY2VzcygpIHx8ICFJc1VuZGVyUG9zdG1hc3Rlcik7CisJQXNzZXJ0KEFtU3Rh cnR1cFByb2Nlc3MoKSB8fCAhSXNVbmRlclBvc3RtYXN0ZXIgfHwgQW1XYWxQaXBlbGluZSgpKTsK IAlwZ19hdG9taWNfd3JpdGVfdTY0KGNvdW50ZXIsIHBnX2F0b21pY19yZWFkX3U2NChjb3VudGVy KSArIDEpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n cmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmlu ZGV4IDg4YzBiNDNhYzc2Li4zYjg5NDc0NTAzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3JlY292ZXJ5LmMKQEAgLTM1NywxMiArMzU3LDYgQEAgc3RhdGljIHZvaWQgcmVjb3Zl cnlQYXVzZXNIZXJlKGJvb2wgZW5kT2ZSZWNvdmVyeSk7CiBzdGF0aWMgYm9vbCByZWNvdmVyeUFw cGx5RGVsYXkoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwogc3RhdGljIHZvaWQgQ29uZmlybVJl Y292ZXJ5UGF1c2VkKHZvaWQpOwogCi1zdGF0aWMgWExvZ1JlY29yZCAqUmVhZFJlY29yZChYTG9n UHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNoZXIsCi0JCQkJCQkJICBpbnQgZW1vZGUsIGJvb2wgZmV0 Y2hpbmdfY2twdCwKLQkJCQkJCQkgIFRpbWVMaW5lSUQgcmVwbGF5VExJKTsKLQotc3RhdGljIGlu dAlYTG9nUGFnZVJlYWQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBYTG9nUmVjUHRyIHRh cmdldFBhZ2VQdHIsCi0JCQkJCQkgaW50IHJlcUxlbiwgWExvZ1JlY1B0ciB0YXJnZXRSZWNQdHIs IGNoYXIgKnJlYWRCdWYpOwogc3RhdGljIFhMb2dQYWdlUmVhZFJlc3VsdCBXYWl0Rm9yV0FMVG9C ZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsCiAJCQkJCQkJCQkJCQkJICBib29sIHJh bmRBY2Nlc3MsCiAJCQkJCQkJCQkJCQkJICBib29sIGZldGNoaW5nX2NrcHQsCkBAIC0zODQsNiAr Mzc4LDcgQEAgc3RhdGljIGJvb2wgSG90U3RhbmRieUFjdGl2ZUluUmVwbGF5KHZvaWQpOwogCiBz dGF0aWMgdm9pZCBTZXRDdXJyZW50Q2h1bmtTdGFydFRpbWUoVGltZXN0YW1wVHogeHRpbWUpOwog c3RhdGljIHZvaWQgU2V0TGF0ZXN0WFRpbWUoVGltZXN0YW1wVHogeHRpbWUpOworc3RhdGljIHZv aWQgSW5pdGlhbGl6ZVBpcGVsaW5lU3RhcnR1cEVudihXYWxQaXBlbGluZVBhcmFtcyAqcGFyYW1z KTsKIAogLyoKICAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgZm9yIFdBTCByZWNvdmVyeQpAQCAt NDA0LDkgKzM5OSwyNyBAQCBYTG9nUmVjb3ZlcnlTaG1lbUluaXQodm9pZCAqYXJnKQogCiAJU3Bp bkxvY2tJbml0KCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKIAlJbml0U2hhcmVkTGF0Y2go JlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCk7CisJSW5pdFNoYXJlZExhdGNo KCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5QXBwbHlEZWxheUxhdGNoKTsKIAlDb25kaXRpb25W YXJpYWJsZUluaXQoJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlOb3RQYXVzZWRDVik7CiB9CiAK Ky8qCisgKiBXZSBtYXkgbm90IGJlIGFibGUgdG8gc2hhcmUgZXhwZWN0ZWRUTEVzIGxpc3QgYWNy b3NzIHRoZSBzaGFyZWRtZW1vcnkuCisgKiBGb3Igbm93IGp1c3QgdHJpZ2dlciB0aGUgc3RhcnR1 cCBwcm9jZXNzIChjb25zdW1lcikgdG8KKyAqIHJlcmVhZCB0aGUgdGltZWxpbmVoaXN0b3J5IGZp bGUgIHdoZW5ldmVyIHBpcGVsaW5lIHVwZGF0ZXMgdGhlIHZhbHVlIGZvcgorICogZXhwZWN0ZWRU TEVzLiBTbyB0aGUgY29uc3VtZXIgcHJvYyB3aWxsIGV4cGVjdGVkVExFcyB1cGRhdGVkIGxvY2Fs bHkuCisgKi8KK3N0YXRpYyB2b2lkCitQaXBlbGluZUNvbnN1bWVyZXhwZWN0ZWRUTEVzVXBkYXRl VExJKFRpbWVMaW5lSUQgcmVjb3ZlcnlUYXJnZXRUTEkpCit7CisJaWYgKHdhbF9waXBlbGluZV9l bmFibGVkKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNr KTsKKwkJWExvZ1JlY292ZXJ5Q3RsLT5leHBlY3RlZFRMRXNVcGRhdGVUTEkgPSByZWNvdmVyeVRh cmdldFRMSTsKKwkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsK Kwl9Cit9CisKIC8qCiAgKiBBIHRoaW4gd3JhcHBlciB0byBlbmFibGUgU3RhbmRieU1vZGUgYW5k IGRvIG90aGVyIHByZXBhcmF0b3J5IHdvcmsgYXMKICAqIG5lZWRlZC4KQEAgLTQyMiw3ICs0MzUs OCBAQCBFbmFibGVTdGFuZGJ5TW9kZSh2b2lkKQogCSAqIHN0YXJ0dXAgcHJvZ3Jlc3MgdGltZW91 dCBpbiBzdGFuZGJ5IG1vZGUgdG8gYXZvaWQgY2FsbGluZwogCSAqIHN0YXJ0dXBfcHJvZ3Jlc3Nf dGltZW91dF9oYW5kbGVyKCkgdW5uZWNlc3NhcmlseS4KIAkgKi8KLQlkaXNhYmxlX3N0YXJ0dXBf cHJvZ3Jlc3NfdGltZW91dCgpOworCWlmICghQW1XYWxQaXBlbGluZSgpKQorCQlkaXNhYmxlX3N0 YXJ0dXBfcHJvZ3Jlc3NfdGltZW91dCgpOwogfQogCiAvKgpAQCAtNDgyLDcgKzQ5NiwxMCBAQCBJ bml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1 dGRvd25fcHRyLAogCSAqIHJlY292ZXJ5LCBpZiByZXF1aXJlZC4KIAkgKi8KIAlpZiAoQXJjaGl2 ZVJlY292ZXJ5UmVxdWVzdGVkKQorCXsKKwkJT3duTGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVj b3ZlcnlBcHBseURlbGF5TGF0Y2gpOwogCQlPd25MYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNv dmVyeVdha2V1cExhdGNoKTsKKwl9CiAKIAkvKgogCSAqIFNldCB0aGUgV0FMIHJlYWRpbmcgcHJv Y2Vzc29yIG5vdywgYXMgaXQgd2lsbCBiZSBuZWVkZWQgd2hlbiByZWFkaW5nCkBAIC05NTQsNiAr OTcxLDE0IEBAIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlLCBi b29sICp3YXNTaHV0ZG93bl9wdHIsCiAJCW1pblJlY292ZXJ5UG9pbnRUTEkgPSAwOwogCX0KIAor CS8qIHVwZGF0ZSBzaGFyZWQgc3RhdGUuICovCisJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQor CXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJWExv Z1JlY292ZXJ5Q3RsLT5JbkFyY2hpdmVSZWNvdmVyeSA9IEluQXJjaGl2ZVJlY292ZXJ5OworCQlT cGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCX0KKwogCS8qCiAJ ICogU3RhcnQgcmVjb3ZlcnkgYXNzdW1pbmcgdGhhdCB0aGUgZmluYWwgcmVjb3JkIGlzbid0IGxv c3QuCiAJICovCkBAIC05NjUsNiArOTkwLDEyIEBAIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmls ZURhdGEgKkNvbnRyb2xGaWxlLCBib29sICp3YXNTaHV0ZG93bl9wdHIsCiAJKmhhdmVUYmxzcGNN YXBfcHRyID0gaGF2ZVRibHNwY01hcDsKIH0KIAordm9pZCBEaXNvd25SZWNvdmVyeVdha2V1cExh dGNoKHZvaWQpCit7CisJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKKwkJRGlzb3duTGF0 Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCk7Cit9CisKIC8qCiAgKiBT ZWUgaWYgdGhlcmUgYXJlIGFueSByZWNvdmVyeSBzaWduYWwgZmlsZXMgYW5kIGlmIHNvLCBzZXQg c3RhdGUgZm9yCiAgKiByZWNvdmVyeS4KQEAgLTE0MTMsNiArMTQ0NCwxNSBAQCBGaW5pc2hXYWxS ZWNvdmVyeSh2b2lkKQogCVRpbWVMaW5lSUQJbGFzdFJlY1RMSTsKIAlYTG9nUmVjUHRyCWVuZE9m TG9nOwogCisJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJl KCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJSW5BcmNoaXZlUmVjb3ZlcnkgPSBYTG9n UmVjb3ZlcnlDdGwtPkluQXJjaGl2ZVJlY292ZXJ5OworCQltaXNzaW5nQ29udHJlY1B0ciA9IFhM b2dSZWNvdmVyeUN0bC0+bWlzc2luZ0NvbnRyZWNQdHI7CisJCWFib3J0ZWRSZWNQdHIgPSBYTG9n UmVjb3ZlcnlDdGwtPmFib3J0ZWRSZWNQdHI7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292 ZXJ5Q3RsLT5pbmZvX2xjayk7CisJfQorCiAJLyoKIAkgKiBLaWxsIFdBTCByZWNlaXZlciwgaWYg aXQncyBzdGlsbCBydW5uaW5nLCBiZWZvcmUgd2UgY29udGludWUgdG8gd3JpdGUKIAkgKiB0aGUg c3RhcnR1cCBjaGVja3BvaW50IGFuZCBhYm9ydGVkLWNvbnRyZWNvcmQgcmVjb3Jkcy4gSXQgd2ls bCB0cnVtcApAQCAtMTQ3MCw2ICsxNTEwLDE3IEBAIEZpbmlzaFdhbFJlY292ZXJ5KHZvaWQpCiAJ CWxhc3RSZWMgPSBYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZFJlYWRSZWNQdHI7CiAJCWxh c3RSZWNUTEkgPSBYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZFRMSTsKIAl9CisKKwkvKgor CSAqIEludmFsaWRhdGUgY29udGVudHMgb2YgaW50ZXJuYWwgYnVmZmVyIGJlZm9yZSByZWFkIGF0 dGVtcHQuICBKdXN0IHNldAorCSAqIHRoZSBsZW5ndGggdG8gMCwgcmF0aGVyIHRoYW4gYSBmdWxs IFhMb2dSZWFkZXJJbnZhbFJlYWRTdGF0ZSgpLgorCSAqCisJICogVGhpcyBpcyBuZWVkZWQgYmVj YXVzZSB3ZSBjb3VsZCBiZSByZWFkaW5nIGZyb20gdGhlIHBpcGVsaW5lIHJlYWRlciBzbworCSAq IGZhciwgc28gYmVmb3JlIG1vdmluZyBiYWNrIHRoZSB0aGUgc3RhcnR1cCBwcm9jIHJlYWRlcnN0 YXRlIGJldHRlciB0bworCSAqIGludmFsaWRhdGUgaXQuCisJICovCisJeGxvZ3JlYWRlci0+cmVh ZExlbiA9IDA7CisKIAlYTG9nUHJlZmV0Y2hlckJlZ2luUmVhZCh4bG9ncHJlZmV0Y2hlciwgbGFz dFJlYyk7CiAJKHZvaWQpIFJlYWRSZWNvcmQoeGxvZ3ByZWZldGNoZXIsIFBBTklDLCBmYWxzZSwg bGFzdFJlY1RMSSk7CiAJZW5kT2ZMb2cgPSB4bG9ncmVhZGVyLT5FbmRSZWNQdHI7CkBAIC0xNTky LDcgKzE2NDMsNjkgQEAgU2h1dGRvd25XYWxSZWNvdmVyeSh2b2lkKQogCSAqIGl0LCBidXQgbGV0 J3MgZG8gaXQgZm9yIHRoZSBzYWtlIG9mIHRpZGluZXNzLgogCSAqLwogCWlmIChBcmNoaXZlUmVj b3ZlcnlSZXF1ZXN0ZWQpCi0JCURpc293bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5 V2FrZXVwTGF0Y2gpOworCXsKKwkJRGlzb3duTGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3Zl cnlBcHBseURlbGF5TGF0Y2gpOworCisJCS8qCisJCSAqIE9ubHkgZGlzb3duIHRoZSBsYXRjaCBp ZiB3ZSB3ZXJlIHRoZSBvd25lciAocGlwZWxpbmUgZGlzYWJsZWQpLgorCQkgKi8KKwkJaWYgKCF3 YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwkJCURpc293bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJl Y292ZXJ5V2FrZXVwTGF0Y2gpOworCX0KKworCit9CisKKy8qCisgKiBHZXQgbmV4dCByZWNvcmQg Zm9yIHJlZG8uCisgKiBVc2UgdGhlIHBpcGVsaW5lIGlmIGVuYWJsZWQgZm9yIHBhcmFsbGVsIGRl Y29kaW5nIGFuZCByZWNlaXZlIGRlY29kZWQKKyAqIHJlY29yZHMgZnJvbSBhIHNoYXJlZCBxdWV1 ZSwgZWxzZSByZWFkIGl0IGRpcmVjdGx5LgorICovCitzdGF0aWMgWExvZ1JlY29yZCAqCitSZWNl aXZlUmVjb3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwgaW50IGVtb2RlLAorCQkJ CWJvb2wgZmV0Y2hpbmdfY2twdCwgVGltZUxpbmVJRCByZXBsYXlUTEksCisJCQkJWExvZ1JlYWRl clN0YXRlICoqbG9jYWxyZWFkZXIsIGJvb2wgZmlyc3RfaXRlcmF0aW9uKQoreworCisJWExvZ1Jl Y29yZCAqcmVjb3JkID0gTlVMTDsKKwlYTG9nUmVhZGVyU3RhdGUgKnJlYWRlciA9ICpsb2NhbHJl YWRlcjsKKworCS8qCisJICogSWYgcGlwZWxpbmUgbm90IGVuYWJsZWQgcmVhZCB0aGUgcmVjb3Jk IGRpcmVjdGx5CisJICovCisJaWYgKCF3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwl7CisJCXJlY29y ZCA9IFJlYWRSZWNvcmQoeGxvZ3ByZWZldGNoZXIsIGVtb2RlLCBmZXRjaGluZ19ja3B0LCByZXBs YXlUTEkpOworCQlyZXR1cm4gcmVjb3JkOworCX0KKworCS8qCisJICogR2V0IHJlY29yZCBmcm9t IHRoZSBwaXBlbGluZQorCSAqLworCWlmIChXYWxQaXBlbGluZV9Jc0FjdGl2ZSgpKQorCXsKKwkJ RGVjb2RlZFhMb2dSZWNvcmQgKmRlY29kZWRfcmVjb3JkID0gTlVMTDsKKworCQlkZWNvZGVkX3Jl Y29yZCA9IFdhbFBpcGVsaW5lX1JlY2VpdmVSZWNvcmQocmVhZGVyLCBmaXJzdF9pdGVyYXRpb24p OworCisJCWlmIChkZWNvZGVkX3JlY29yZCkKKwkJeworCQkJcmVjb3JkID0gJmRlY29kZWRfcmVj b3JkLT5oZWFkZXI7CisJCQlyZXR1cm4gcmVjb3JkOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoK KwkJCSAqIFdlIHdpbGwgZW5kIHVwIGhlcmUgb25seSB3aGVuIHBpcGVsaW5lIGNvdWxkbid0IHJl YWQgbW9yZQorCQkJICogcmVjb3JkcyBhbmQgaGF2ZSBzZW50IGEgc2h1dGRvd24gbXNnLiBXZSB3 aWxsIGFja25vd2xkZ2UgdGhpcworCQkJICogYW5kIHdpbGwgdHJpZ2dlciByZXF1ZXN0IHRvIHN0 b3AgdGhlIHBpcGVsaW5lIHdvcmtlcnMuCisJCQkgKi8KKwkJCVdhbFBpcGVsaW5lX1N0b3AoKTsK KwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJZWxvZyhQQU5JQywgIlt3YWxwaXBlbGluZV0g Y29uc3VtZXI6IHBpcGVsaW5lIG5vdCBhY3RpdmUsIGV2ZW4gdGhvdWdoIHdhbF9waXBlbGluZSBp cyBzZXQgdG8gb24uIik7CiB9CiAKIC8qCkBAIC0xNjA3LDYgKzE3MjAsMTIgQEAgUGVyZm9ybVdh bFJlY292ZXJ5KHZvaWQpCiAJYm9vbAkJcmVhY2hlZFJlY292ZXJ5VGFyZ2V0ID0gZmFsc2U7CiAJ VGltZUxpbmVJRAlyZXBsYXlUTEk7CiAKKwkvKgorCSAqIHN0YW5kYWxvbmUgYmFja2VuZCBtYXkg ZXhpc3QgaW4gY2FzZSBvZiBwZ19yZXdpbmQuCisJICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3Rl cikKKwkJd2FsX3BpcGVsaW5lX2VuYWJsZWQgPSBmYWxzZTsKKwogCS8qCiAJICogSW5pdGlhbGl6 ZSBzaGFyZWQgdmFyaWFibGVzIGZvciB0cmFja2luZyBwcm9ncmVzcyBvZiBXQUwgcmVwbGF5LCBh cyBpZgogCSAqIHdlIGhhZCBqdXN0IHJlcGxheWVkIHRoZSByZWNvcmQgYmVmb3JlIHRoZSBSRURP IGxvY2F0aW9uIChvciB0aGUKQEAgLTE2ODEsMTEgKzE4MDAsMjQgQEAgUGVyZm9ybVdhbFJlY292 ZXJ5KHZvaWQpCiAJewogCQlUaW1lc3RhbXBUeiB4dGltZTsKIAkJUEdSVXNhZ2UJcnUwOworCQl1 aW50NjQgCQlsb29wX2NvdW50ID0gMDsKIAogCQlwZ19ydXNhZ2VfaW5pdCgmcnUwKTsKIAogCQlJ blJlZG8gPSB0cnVlOwogCisJCWlmKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQl7CisJCQkvKgor CQkJICogU3RhcnR1cCBwcm9jIHBhcmFtZXRlcnMgdGhhdCBwaXBlbGluZSBzaG9sZCBhbHNvIGJl IGF3YXJlIG9mLgorCQkJICovCisJCQlXYWxQaXBlbGluZVBhcmFtcyAqcGFyYW1zID0gcGFsbG9j MChzaXplb2YoV2FsUGlwZWxpbmVQYXJhbXMpKTsKKworCQkJcGFyYW1zLT5SZXBsYXlUTEkgPSBy ZXBsYXlUTEk7CisJCQlJbml0aWFsaXplUGlwZWxpbmVTdGFydHVwRW52KHBhcmFtcyk7CisJCQlX YWxQaXBlbGluZV9TdGFydChwYXJhbXMpOworCQl9CisKIAkJUm1nclN0YXJ0dXAoKTsKIAogCQll cmVwb3J0KExPRywKQEAgLTE3OTEsNyArMTkyMyw3IEBAIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lk KQogCQkJfQogCiAJCQkvKiBFbHNlLCB0cnkgdG8gZmV0Y2ggdGhlIG5leHQgV0FMIHJlY29yZCAq LwotCQkJcmVjb3JkID0gUmVhZFJlY29yZCh4bG9ncHJlZmV0Y2hlciwgTE9HLCBmYWxzZSwgcmVw bGF5VExJKTsKKwkJCXJlY29yZCA9IFJlY2VpdmVSZWNvcmQoeGxvZ3ByZWZldGNoZXIsIExPRywg ZmFsc2UsIHJlcGxheVRMSSwgJnhsb2dyZWFkZXIsIGxvb3BfY291bnQrKyA9PSAwKTsKIAkJfSB3 aGlsZSAocmVjb3JkICE9IE5VTEwpOwogCiAJCS8qCkBAIC0xODAwLDYgKzE5MzIsOSBAQCBQZXJm b3JtV2FsUmVjb3Zlcnkodm9pZCkKIAogCQlpZiAocmVhY2hlZFJlY292ZXJ5VGFyZ2V0KQogCQl7 CisJCQlpZiAod2FsX3BpcGVsaW5lX2VuYWJsZWQpCisJCQkJV2FsUGlwZWxpbmVfU3RvcCgpOwor CiAJCQlpZiAoIXJlYWNoZWRDb25zaXN0ZW5jeSkKIAkJCQllcmVwb3J0KEZBVEFMLAogCQkJCQkJ KGVycm1zZygicmVxdWVzdGVkIHJlY292ZXJ5IHN0b3AgcG9pbnQgaXMgYmVmb3JlIGNvbnNpc3Rl bnQgcmVjb3ZlcnkgcG9pbnQiKSkpOwpAQCAtMTgzNCw2ICsxOTY5LDggQEAgUGVyZm9ybVdhbFJl Y292ZXJ5KHZvaWQpCiAKIAkJUm1nckNsZWFudXAoKTsKIAorCQkvLyBYWFg6IHRlc3RpbmcgcHVy cG9zZSBvbmx5CisJCWVyZXBvcnQoREVCVUcxLCAoZXJybXNnKCJyZXBsYXkgbG9vcCBmaWluaXNo ZWQgd2l0aCBsb29wIGNvdW50OiAiIFVJTlQ2NF9GT1JNQVQsIGxvb3BfY291bnQpKSk7CiAJCWVy ZXBvcnQoTE9HLAogCQkJCWVycm1zZygicmVkbyBkb25lIGF0ICVYLyUwOFggc3lzdGVtIHVzYWdl OiAlcyIsCiAJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyh4bG9ncmVhZGVyLT5SZWFkUmVjUHRyKSwK QEAgLTE4NzIsNyArMjAwOSw5IEBAIHN0YXRpYyB2b2lkCiBBcHBseVdhbFJlY29yZChYTG9nUmVh ZGVyU3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNvcmQgKnJlY29yZCwgVGltZUxpbmVJRCAqcmVw bGF5VExJKQogewogCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCVhMb2dSZWNQ dHIgCXdhbHJjdl9mbHVzaGVkdXB0bzsKIAlib29sCQlzd2l0Y2hlZFRMSSA9IGZhbHNlOworCWJv b2wJCXBpcGVsaW5lX2VuYWJsZWRfc3RhbmJ5ID0gZmFsc2U7CiAKIAkvKiBTZXR1cCBlcnJvciB0 cmFjZWJhY2sgc3VwcG9ydCBmb3IgZXJlcG9ydCgpICovCiAJZXJyY2FsbGJhY2suY2FsbGJhY2sg PSBybV9yZWRvX2Vycm9yX2NhbGxiYWNrOwpAQCAtMTk3Myw2ICsyMTEyLDggQEAgQXBwbHlXYWxS ZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBYTG9nUmVjb3JkICpyZWNvcmQsIFRp bWVMaW5lSUQgKnJlcGwKIAlYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZFJlYWRSZWNQdHIg PSB4bG9ncmVhZGVyLT5SZWFkUmVjUHRyOwogCVhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVk RW5kUmVjUHRyID0geGxvZ3JlYWRlci0+RW5kUmVjUHRyOwogCVhMb2dSZWNvdmVyeUN0bC0+bGFz dFJlcGxheWVkVExJID0gKnJlcGxheVRMSTsKKwl3YWxyY3ZfZmx1c2hlZHVwdG8gPSBYTG9nUmVj b3ZlcnlDdGwtPmZsdXNoZWRVcHRvUmVjUHRyOworCXBpcGVsaW5lX2VuYWJsZWRfc3RhbmJ5ID0g WExvZ1JlY292ZXJ5Q3RsLT5zdGFuYnlFbmFibGVkOwogCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1Jl Y292ZXJ5Q3RsLT5pbmZvX2xjayk7CiAKIAkvKiAtLS0tLS0KQEAgLTIwMTEsNiArMjE1MiwxNiBA QCBBcHBseVdhbFJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNvcmQg KnJlY29yZCwgVGltZUxpbmVJRCAqcmVwbAogCQlXYWxSY3ZSZXF1ZXN0QXBwbHlSZXBseSgpOwog CX0KIAorCS8qCisJICogQXMgdGhlIHBpcGVsaW5lIChwcm9kdWNlcikgd2FzIHJ1bm5pbmcgd2F5 IGFoZWFkIG9mIHRoZSBzdGFydHVwIHByb2MKKwkgKiAoY29uc3VtZXIpLCBzZWUgaWYgdGhlIHBy b2R1Y2VyIGFza2VkIHRvIHdha2V1cCB0aGUgd2FsX3JlY2lldmVyIGJ5CisJICogdXBkYXRpbmcg dGhlIHZhbHVlIG9mIGBmbHVzaGVkVXB0b1JlY1B0cmAuCisJICovCisJaWYgKCh3YWxyY3ZfZmx1 c2hlZHVwdG8gIT0gSW52YWxpZFhMb2dSZWNQdHIpICYmCisJCSgod2FscmN2X2ZsdXNoZWR1cHRv ID09IHhsb2dyZWFkZXItPkVuZFJlY1B0cikgfHwKKwkJKHdhbHJjdl9mbHVzaGVkdXB0byA9PSB4 bG9ncmVhZGVyLT5SZWFkUmVjUHRyKSkpCisJCVdhbFJjdlJlcXVlc3RBcHBseVJlcGx5KCk7CisK IAkvKiBBbGxvdyByZWFkLW9ubHkgY29ubmVjdGlvbnMgaWYgd2UncmUgY29uc2lzdGVudCBub3cg Ki8KIAlDaGVja1JlY292ZXJ5Q29uc2lzdGVuY3koKTsKIApAQCAtMjAyNiw2ICsyMTc3LDE0IEBA IEFwcGx5V2FsUmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwgWExvZ1JlY29yZCAq cmVjb3JkLCBUaW1lTGluZUlEICpyZXBsCiAJCS8qIFJlc2V0IHRoZSBwcmVmZXRjaGVyLiAqLwog CQlYTG9nUHJlZmV0Y2hSZWNvbmZpZ3VyZSgpOwogCX0KKworCS8qIENvbnVzbWVyIHNob3VsZCBh bHNvIGVuYWJsZSB0aGUgc3RhbmRieSBpZiBwaXBsaW5lIGhhdmUgKi8KKwlpZiAocGlwZWxpbmVf ZW5hYmxlZF9zdGFuYnkpCisJCUVuYWJsZVN0YW5kYnlNb2RlKCk7CisKKwlTcGluTG9ja0FjcXVp cmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJV2FsUGlwZWxpbmVTaG0tPmFwcGxpZWRfbHNu ID0geGxvZ3JlYWRlci0+RW5kUmVjUHRyOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVT aG0tPm11dGV4KTsKIH0KIAogLyoKQEAgLTIxNTEsMTIgKzIzMTAsMjcgQEAgQ2hlY2tSZWNvdmVy eUNvbnNpc3RlbmN5KHZvaWQpCiAKIAlBc3NlcnQoSW5BcmNoaXZlUmVjb3ZlcnkpOwogCi0JLyoK LQkgKiBhc3N1bWUgdGhhdCB3ZSBhcmUgY2FsbGVkIGluIHRoZSBzdGFydHVwIHByb2Nlc3MsIGFu ZCBoZW5jZSBkb24ndCBuZWVkCi0JICogYSBsb2NrIHRvIHJlYWQgbGFzdFJlcGxheWVkRW5kUmVj UHRyCi0JICovCi0JbGFzdFJlcGxheWVkRW5kUmVjUHRyID0gWExvZ1JlY292ZXJ5Q3RsLT5sYXN0 UmVwbGF5ZWRFbmRSZWNQdHI7Ci0JbGFzdFJlcGxheWVkVExJID0gWExvZ1JlY292ZXJ5Q3RsLT5s YXN0UmVwbGF5ZWRUTEk7CisKKwlpZiAoQW1TdGFydHVwUHJvY2VzcygpKQorCXsKKwkJLyoKKwkJ ICogYXNzdW1lIHRoYXQgd2UgYXJlIGNhbGxlZCBpbiB0aGUgc3RhcnR1cCBwcm9jZXNzLCBhbmQg aGVuY2UgZG9uJ3QgbmVlZAorCQkgKiBhIGxvY2sgdG8gcmVhZCBsYXN0UmVwbGF5ZWRFbmRSZWNQ dHIKKwkJICovCisJCWxhc3RSZXBsYXllZEVuZFJlY1B0ciA9IFhMb2dSZWNvdmVyeUN0bC0+bGFz dFJlcGxheWVkRW5kUmVjUHRyOworCQlsYXN0UmVwbGF5ZWRUTEkgPSBYTG9nUmVjb3ZlcnlDdGwt Pmxhc3RSZXBsYXllZFRMSTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogV2UgY291bGQgYmUg aW4gdGhlIHBpcGVsaW5lIHdvcmtlciwgc28gdXBkYXRlIHRoZSBzaGFyZWQgc3RhdGVzLgorCQkg Ki8KKwkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJbGFz dFJlcGxheWVkRW5kUmVjUHRyID0gWExvZ1JlY292ZXJ5Q3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQ dHI7CisJCWxhc3RSZXBsYXllZFRMSSA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkVExJ OworCQlzdGFuZGJ5U3RhdGUgPSBYTG9nUmVjb3ZlcnlDdGwtPnN0YW5kYnlTdGF0ZTsKKwkJU3Bp bkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwl9CiAKIAkvKgogCSAq IEhhdmUgd2UgcmVhY2hlZCB0aGUgcG9pbnQgd2hlcmUgb3VyIGJhc2UgYmFja3VwIHdhcyBjb21w bGV0ZWQ/CkBAIC0yMzQzLDEyICsyNTE3LDI4IEBAIHN0YXRpYyB2b2lkCiBjaGVja1RpbWVMaW5l U3dpdGNoKFhMb2dSZWNQdHIgbHNuLCBUaW1lTGluZUlEIG5ld1RMSSwgVGltZUxpbmVJRCBwcmV2 VExJLAogCQkJCQlUaW1lTGluZUlEIHJlcGxheVRMSSkKIHsKKworCiAJLyogQ2hlY2sgdGhhdCB0 aGUgcmVjb3JkIGFncmVlcyBvbiB3aGF0IHRoZSBjdXJyZW50IChvbGQpIHRpbWVsaW5lIGlzICov CiAJaWYgKHByZXZUTEkgIT0gcmVwbGF5VExJKQogCQllcmVwb3J0KFBBTklDLAogCQkJCShlcnJt c2coInVuZXhwZWN0ZWQgcHJldmlvdXMgdGltZWxpbmUgSUQgJXUgKGN1cnJlbnQgdGltZWxpbmUg SUQgJXUpIGluIGNoZWNrcG9pbnQgcmVjb3JkIiwKIAkJCQkJCXByZXZUTEksIHJlcGxheVRMSSkp KTsKIAorCisJLyogUGlwZWxpbmUgbWF5IGhhdmUgdXBkYXRlZCB0aGUgZXhwZWN0ZWRUTEVzICov CisJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCXsKKwkJVGltZUxpbmVJRAl0YXJnZXRUTEk7 CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJdGFy Z2V0VExJID0gWExvZ1JlY292ZXJ5Q3RsLT5leHBlY3RlZFRMRXNVcGRhdGVUTEk7CisJCVNwaW5M b2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisKKwkJaWYgKHRhcmdldFRM SSkKKwkJCWV4cGVjdGVkVExFcyA9IHJlYWRUaW1lTGluZUhpc3RvcnkodGFyZ2V0VExJKTsKKwl9 CisKIAkvKgogCSAqIFRoZSBuZXcgdGltZWxpbmUgYmV0dGVyIGJlIGluIHRoZSBsaXN0IG9mIHRp bWVsaW5lcyB3ZSBleHBlY3QgdG8gc2VlLAogCSAqIGFjY29yZGluZyB0byB0aGUgdGltZWxpbmUg aGlzdG9yeS4gSXQgc2hvdWxkIGFsc28gbm90IGRlY3JlYXNlLgpAQCAtMjk5Niw3ICszMTg2LDcg QEAgcmVjb3ZlcnlBcHBseURlbGF5KFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJd2hpbGUg KHRydWUpCiAJewotCQlSZXNldExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVw TGF0Y2gpOworCQlSZXNldExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5QXBwbHlEZWxh eUxhdGNoKTsKIAogCQkvKiBUaGlzIG1pZ2h0IGNoYW5nZSByZWNvdmVyeV9taW5fYXBwbHlfZGVs YXkuICovCiAJCVByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVwdHMoKTsKQEAgLTMwMjEsNyArMzIx MSw3IEBAIHJlY292ZXJ5QXBwbHlEZWxheShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQll bG9nKERFQlVHMiwgInJlY292ZXJ5IGFwcGx5IGRlbGF5ICVsZCBtaWxsaXNlY29uZHMiLCBtc2Vj cyk7CiAKLQkJKHZvaWQpIFdhaXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdha2V1 cExhdGNoLAorCQkodm9pZCkgV2FpdExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5QXBw bHlEZWxheUxhdGNoLAogCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElU X09OX1BNX0RFQVRILAogCQkJCQkJIG1zZWNzLAogCQkJCQkJIFdBSVRfRVZFTlRfUkVDT1ZFUllf QVBQTFlfREVMQVkpOwpAQCAtMzA5Myw3ICszMjgzLDcgQEAgQ29uZmlybVJlY292ZXJ5UGF1c2Vk KHZvaWQpCiAgKiAoZW1vZGUgbXVzdCBiZSBlaXRoZXIgUEFOSUMsIExPRykuIEluIHN0YW5kYnkg bW9kZSwgcmV0cmllcyB1bnRpbCBhIHZhbGlkCiAgKiByZWNvcmQgaXMgYXZhaWxhYmxlLgogICov Ci1zdGF0aWMgWExvZ1JlY29yZCAqCitYTG9nUmVjb3JkICoKIFJlYWRSZWNvcmQoWExvZ1ByZWZl dGNoZXIgKnhsb2dwcmVmZXRjaGVyLCBpbnQgZW1vZGUsCiAJCSAgIGJvb2wgZmV0Y2hpbmdfY2tw dCwgVGltZUxpbmVJRCByZXBsYXlUTEkpCiB7CkBAIC0zMTAxLDcgKzMyOTEsNyBAQCBSZWFkUmVj b3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwgaW50IGVtb2RlLAogCVhMb2dSZWFk ZXJTdGF0ZSAqeGxvZ3JlYWRlciA9IFhMb2dQcmVmZXRjaGVyR2V0UmVhZGVyKHhsb2dwcmVmZXRj aGVyKTsKIAlYTG9nUGFnZVJlYWRQcml2YXRlICpwcml2YXRlID0gKFhMb2dQYWdlUmVhZFByaXZh dGUgKikgeGxvZ3JlYWRlci0+cHJpdmF0ZV9kYXRhOwogCi0JQXNzZXJ0KEFtU3RhcnR1cFByb2Nl c3MoKSB8fCAhSXNVbmRlclBvc3RtYXN0ZXIpOworCUFzc2VydChBbVN0YXJ0dXBQcm9jZXNzKCkg fHwgIUlzVW5kZXJQb3N0bWFzdGVyIHx8IEFtV2FsUGlwZWxpbmUoKSk7CiAKIAkvKiBQYXNzIHRo cm91Z2ggcGFyYW1ldGVycyB0byBYTG9nUGFnZVJlYWQgKi8KIAlwcml2YXRlLT5mZXRjaGluZ19j a3B0ID0gZmV0Y2hpbmdfY2twdDsKQEAgLTMxMzYsNiArMzMyNiwxNyBAQCBSZWFkUmVjb3JkKFhM b2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwgaW50IGVtb2RlLAogCQkJewogCQkJCWFib3J0 ZWRSZWNQdHIgPSB4bG9ncmVhZGVyLT5hYm9ydGVkUmVjUHRyOwogCQkJCW1pc3NpbmdDb250cmVj UHRyID0geGxvZ3JlYWRlci0+bWlzc2luZ0NvbnRyZWNQdHI7CisKKwkJCQkvKgorCQkJCSAqIEFs c28gdXBkYXRlIHRoZSBzaGFyZWQgc3RhdGUgaWYgbmVjZXNzYXJ5CisJCQkJICovCisJCQkJaWYg KHdhbF9waXBlbGluZV9lbmFibGVkKQorCQkJCXsKKwkJCQkJU3BpbkxvY2tBY3F1aXJlKCZYTG9n UmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5hYm9ydGVkUmVj UHRyID0gYWJvcnRlZFJlY1B0cjsKKwkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5taXNzaW5nQ29udHJl Y1B0ciA9IG1pc3NpbmdDb250cmVjUHRyOworCQkJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNv dmVyeUN0bC0+aW5mb19sY2spOworCQkJCX0KIAkJCX0KIAogCQkJaWYgKHJlYWRGaWxlID49IDAp CkBAIC0zMjAzLDkgKzM0MDQsMzEgQEAgUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3By ZWZldGNoZXIsIGludCBlbW9kZSwKIAkJCWlmICghSW5BcmNoaXZlUmVjb3ZlcnkgJiYgQXJjaGl2 ZVJlY292ZXJ5UmVxdWVzdGVkICYmCiAJCQkJIWZldGNoaW5nX2NrcHQpCiAJCQl7CisJCQkJLyoK KwkJCQkgKiBXYWl0IGZvciB0aGUgc3RhcnR1cCBwcm9jZXNzIHRvIGFwcGx5IHRoZSBsYXN0IHNl bnQgcmVjb3JkCisJCQkJICogYnkgdGhlIHBpcGVsaW5lLCBvdGhlcndpc2Ugd2Ugd2lsbCBmYWls IHRoZSBjb25zaXN0ZW5jeQorCQkJCSAqIGNoZWNrIGFzIGFsbCB0aGUgcmVjb3JkcyBkZWNvZGVk IGJ5IHRoZSBwaXBlbGluZSBoYXZlIG5vdAorCQkJCSAqIGFycml2ZWQvY29uc3VtZWQgYnkgdGhl IGNvbnN1bWVyIChzdGF0dXAgcHJvYykgeWV0LgorCQkJCSAqLworCQkJCWlmICh3YWxfcGlwZWxp bmVfZW5hYmxlZCAmJiBBbVdhbFBpcGVsaW5lKCkpCisJCQkJCVdhbFBpcGVsaW5lX1dhaXRGb3JD b25zdW1lckNhdGNodXAoKTsKKwogCQkJCWVyZXBvcnQoREVCVUcxLAogCQkJCQkJKGVycm1zZ19p bnRlcm5hbCgicmVhY2hlZCBlbmQgb2YgV0FMIGluIHBnX3dhbCwgZW50ZXJpbmcgYXJjaGl2ZSBy ZWNvdmVyeSIpKSk7CiAJCQkJSW5BcmNoaXZlUmVjb3ZlcnkgPSB0cnVlOworCisJCQkJaWYgKHdh bF9waXBlbGluZV9lbmFibGVkKQorCQkJCXsKKwkJCQkJLyogYWxzbyB1cGRhdGUgdGhlIHNoYXJl ZCBzdGF0ZSAqLworCQkJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19s Y2spOworCQkJCQlYTG9nUmVjb3ZlcnlDdGwtPkluQXJjaGl2ZVJlY292ZXJ5ID0gSW5BcmNoaXZl UmVjb3Zlcnk7CisKKwkJCQkJLyogdXBkYXRlIHN0YXJ0dXAgcHJvYyAoY29uc3VtZXIpIGFib3V0 IHRoZSBzdGFuZGJ5bW9kZSAqLworCQkJCQlpZiAoU3RhbmRieU1vZGVSZXF1ZXN0ZWQpCisJCQkJ CQlYTG9nUmVjb3ZlcnlDdGwtPnN0YW5ieUVuYWJsZWQgPSB0cnVlOworCQkJCQlTcGluTG9ja1Jl bGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCX0KKwogCQkJCWlmIChTdGFu ZGJ5TW9kZVJlcXVlc3RlZCkKIAkJCQkJRW5hYmxlU3RhbmRieU1vZGUoKTsKIApAQCAtMzI2Miw3 ICszNDg1LDcgQEAgUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNoZXIsIGlu dCBlbW9kZSwKICAqIFhMb2dQYWdlUmVhZCgpIHRvIHRyeSBmZXRjaGluZyB0aGUgcmVjb3JkIGZy b20gYW5vdGhlciBzb3VyY2UsIG9yIHRvCiAgKiBzbGVlcCBhbmQgcmV0cnkuCiAgKi8KLXN0YXRp YyBpbnQKK2ludAogWExvZ1BhZ2VSZWFkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwgWExv Z1JlY1B0ciB0YXJnZXRQYWdlUHRyLCBpbnQgcmVxTGVuLAogCQkJIFhMb2dSZWNQdHIgdGFyZ2V0 UmVjUHRyLCBjaGFyICpyZWFkQnVmKQogewpAQCAtMzI3NCw3ICszNDk3LDcgQEAgWExvZ1BhZ2VS ZWFkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwgWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRy LCBpbnQgcmVxTGVuLAogCWludAkJCXI7CiAJaW5zdHJfdGltZQlpb19zdGFydDsKIAotCUFzc2Vy dChBbVN0YXJ0dXBQcm9jZXNzKCkgfHwgIUlzVW5kZXJQb3N0bWFzdGVyKTsKKwlBc3NlcnQoQW1T dGFydHVwUHJvY2VzcygpIHx8ICFJc1VuZGVyUG9zdG1hc3RlciB8fCBBbVdhbFBpcGVsaW5lKCkp OwogCiAJWExCeXRlVG9TZWcodGFyZ2V0UGFnZVB0ciwgdGFyZ2V0U2VnTm8sIHdhbF9zZWdtZW50 X3NpemUpOwogCXRhcmdldFBhZ2VPZmYgPSBYTG9nU2VnbWVudE9mZnNldCh0YXJnZXRQYWdlUHRy LCB3YWxfc2VnbWVudF9zaXplKTsKQEAgLTM3MDAsNyArMzkyMyw4IEBAIFdhaXRGb3JXQUxUb0Jl Y29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkJ CSBMU05fRk9STUFUX0FSR1MoUmVjUHRyKSk7CiAKIAkJCQkJCS8qIERvIGJhY2tncm91bmQgdGFz a3MgdGhhdCBtaWdodCBiZW5lZml0IHVzIGxhdGVyLiAqLwotCQkJCQkJS25vd25Bc3NpZ25lZFRy YW5zYWN0aW9uSWRzSWRsZU1haW50ZW5hbmNlKCk7CisJCQkJCQlpZiAoQW1TdGFydHVwUHJvY2Vz cygpKQorCQkJCQkJCUtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkc0lkbGVNYWludGVuYW5jZSgp OwogCiAJCQkJCQkodm9pZCkgV2FpdExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2Fr ZXVwTGF0Y2gsCiAJCQkJCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfApAQCAtMzcx Miw2ICszOTM2LDggQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVj UHRyLCBib29sIHJhbmRBY2Nlc3MsCiAKIAkJCQkJCS8qIEhhbmRsZSBpbnRlcnJ1cHQgc2lnbmFs cyBvZiBzdGFydHVwIHByb2Nlc3MgKi8KIAkJCQkJCVByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVw dHMoKTsKKwkJCQkJCWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwkJCQkJCQlQcm9jZXNzUGlw ZWxpbmVCZ3dJbnRlcnJ1cHRzKCk7CiAJCQkJCX0KIAkJCQkJbGFzdF9mYWlsX3RpbWUgPSBub3c7 CiAJCQkJCWN1cnJlbnRTb3VyY2UgPSBYTE9HX0ZST01fQVJDSElWRTsKQEAgLTM3MzcsNiArMzk2 MywxNSBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJv b2wgcmFuZEFjY2VzcywKIAkJCQkgeGxvZ1NvdXJjZU5hbWVzW29sZFNvdXJjZV0sIHhsb2dTb3Vy Y2VOYW1lc1tjdXJyZW50U291cmNlXSwKIAkJCQkgbGFzdFNvdXJjZUZhaWxlZCA/ICJmYWlsdXJl IiA6ICJzdWNjZXNzIik7CiAKKwkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQl7CisJCQkv KiBhbHNvIHVwZGF0ZSB0aGUgc2hhcmVkIHN0YXRlICovCisJCQlTcGluTG9ja0FjcXVpcmUoJlhM b2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJWExvZ1JlY292ZXJ5Q3RsLT5jdXJyZW50U291 cmNlID0gY3VycmVudFNvdXJjZTsKKwkJCXBlbmRpbmdXYWxSY3ZSZXN0YXJ0ID0gWExvZ1JlY292 ZXJ5Q3RsLT5wZW5kaW5nV2FsUmN2UmVzdGFydDsKKwkJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1Jl Y292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCX0KKwogCQkvKgogCQkgKiBXZSd2ZSBub3cgaGFuZGxl ZCBwb3NzaWJsZSBmYWlsdXJlLiBUcnkgdG8gcmVhZCBmcm9tIHRoZSBjaG9zZW4KIAkJICogc291 cmNlLgpAQCAtMzgxMSw2ICs0MDQ2LDE0IEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShY TG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQl9CiAJCQkJCXBlbmRpbmdX YWxSY3ZSZXN0YXJ0ID0gZmFsc2U7CiAKKwkJCQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQor CQkJCQl7CisJCQkJCQkvKiBhbHNvIHVwZGF0ZSB0aGUgc2hhcmVkIHN0YXRlICovCisJCQkJCQlT cGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCQkJWExvZ1Jl Y292ZXJ5Q3RsLT5wZW5kaW5nV2FsUmN2UmVzdGFydCA9IGZhbHNlOworCQkJCQkJU3BpbkxvY2tS ZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJCQkJfQorCiAJCQkJCS8qCiAJ CQkJCSAqIExhdW5jaCB3YWxyZWNlaXZlciBpZiBuZWVkZWQuCiAJCQkJCSAqCkBAIC0zODg4LDYg KzQxMzEsMTUgQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVjUHRy LCBib29sIHJhbmRBY2Nlc3MsCiAJCQkJCQkJaWYgKGxhdGVzdENodW5rU3RhcnQgPD0gUmVjUHRy KQogCQkJCQkJCXsKIAkJCQkJCQkJWExvZ1JlY2VpcHRUaW1lID0gR2V0Q3VycmVudFRpbWVzdGFt cCgpOworCisJCQkJCQkJCWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwkJCQkJCQkJeworCQkJ CQkJCQkJLyogYWxzbyB1cGRhdGUgdGhlIHNoYXJlZCBzdGF0ZSAqLworCQkJCQkJCQkJU3Bpbkxv Y2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJCQkJCQkJCVhMb2dSZWNv dmVyeUN0bC0+WExvZ1JlY2VpcHRUaW1lID0gWExvZ1JlY2VpcHRUaW1lOworCQkJCQkJCQkJU3Bp bkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJCQkJCQkJfQorCiAJ CQkJCQkJCVNldEN1cnJlbnRDaHVua1N0YXJ0VGltZShYTG9nUmVjZWlwdFRpbWUpOwogCQkJCQkJ CX0KIAkJCQkJCX0KQEAgLTM5MTYsNyArNDE2OCwxMiBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFp bGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJCWlmIChyZWFk RmlsZSA8IDApCiAJCQkJCQl7CiAJCQkJCQkJaWYgKCFleHBlY3RlZFRMRXMpCisJCQkJCQkJewog CQkJCQkJCQlleHBlY3RlZFRMRXMgPSByZWFkVGltZUxpbmVIaXN0b3J5KHJlY292ZXJ5VGFyZ2V0 VExJKTsKKwkJCQkJCQkJUGlwZWxpbmVDb25zdW1lcmV4cGVjdGVkVExFc1VwZGF0ZVRMSShyZWNv dmVyeVRhcmdldFRMSSk7CisJCQkJCQkJfQorCisKIAkJCQkJCQlyZWFkRmlsZSA9IFhMb2dGaWxl UmVhZChyZWFkU2VnTm8sIHJlY2VpdmVUTEksCiAJCQkJCQkJCQkJCQkJWExPR19GUk9NX1NUUkVB TSwgZmFsc2UpOwogCQkJCQkJCUFzc2VydChyZWFkRmlsZSA+PSAwKTsKQEAgLTM5MjYsNiArNDE4 MywxMyBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJv b2wgcmFuZEFjY2VzcywKIAkJCQkJCQkvKiBqdXN0IG1ha2Ugc3VyZSBzb3VyY2UgaW5mbyBpcyBj b3JyZWN0Li4uICovCiAJCQkJCQkJcmVhZFNvdXJjZSA9IFhMT0dfRlJPTV9TVFJFQU07CiAJCQkJ CQkJWExvZ1JlY2VpcHRTb3VyY2UgPSBYTE9HX0ZST01fU1RSRUFNOworCQkJCQkJCWlmICh3YWxf cGlwZWxpbmVfZW5hYmxlZCkKKwkJCQkJCQl7CisJCQkJCQkJCS8qIGFsc28gdXBkYXRlIHRoZSBz aGFyZWQgc3RhdGUgKi8KKwkJCQkJCQkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwt PmluZm9fbGNrKTsKKwkJCQkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5YTG9nUmVjZWlwdFNvdXJjZSA9 IFhMb2dSZWNlaXB0U291cmNlOworCQkJCQkJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVy eUN0bC0+aW5mb19sY2spOworCQkJCQkJCX0KIAkJCQkJCQlyZXR1cm4gWExSRUFEX1NVQ0NFU1M7 CiAJCQkJCQl9CiAJCQkJCQlicmVhazsKQEAgLTM5NjMsMTUgKzQyMjcsMzUgQEAgV2FpdEZvcldB TFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVjUHRyLCBib29sIHJhbmRBY2Nlc3MsCiAJ CQkJCSAqLwogCQkJCQlpZiAoIXN0cmVhbWluZ19yZXBseV9zZW50KQogCQkJCQl7Ci0JCQkJCQlX YWxSY3ZSZXF1ZXN0QXBwbHlSZXBseSgpOwotCQkJCQkJc3RyZWFtaW5nX3JlcGx5X3NlbnQgPSB0 cnVlOworCQkJCQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkICYmIEFtV2FsUGlwZWxpbmUoKSkK KwkJCQkJCXsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIEluIGNhc2Ugb2YgcGlwZWxpbmUgZW5hYmxl ZCwgd2UgY2Fubm90IGp1c3QgY2FsbAorCQkJCQkJCSAqIFdhbFJjdkZvcmNlUmVwbHkoKSBkaXJl Y3RseSBhcyB0aGUgY29uc3VtZXIgKHN0YXJ0dXAgcHJvYykKKwkJCQkJCQkgKiBoYXZlbid0IGFj dHVhbGx5IHJlY2VpdmVkL3JlcGxheWVkIGFsbCB0aGUgd2FsCisJCQkJCQkJICogcmVjZWl2ZWQg ZnJvbSB0aGUgd2FsX3JlY2VpdmVyIHlldC4KKwkJCQkJCQkgKi8KKwkJCQkJCQlTcGluTG9ja0Fj cXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCQkJCVhMb2dSZWNvdmVyeUN0 bC0+Zmx1c2hlZFVwdG9SZWNQdHIgPSBmbHVzaGVkVXB0bzsKKwkJCQkJCQlTcGluTG9ja1JlbGVh c2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCQkJCXN0cmVhbWluZ19yZXBseV9z ZW50ID0gdHJ1ZTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlXYWxSY3ZS ZXF1ZXN0QXBwbHlSZXBseSgpOworCQkJCQkJCXN0cmVhbWluZ19yZXBseV9zZW50ID0gdHJ1ZTsK KwkJCQkJCX0KIAkJCQkJfQogCiAJCQkJCS8qIERvIGFueSBiYWNrZ3JvdW5kIHRhc2tzIHRoYXQg bWlnaHQgYmVuZWZpdCB1cyBsYXRlci4gKi8KLQkJCQkJS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9u SWRzSWRsZU1haW50ZW5hbmNlKCk7CisJCQkJCWlmIChBbVN0YXJ0dXBQcm9jZXNzKCkpCisJCQkJ CQlLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHNJZGxlTWFpbnRlbmFuY2UoKTsKIAogCQkJCQkv KiBVcGRhdGUgcGdfc3RhdF9yZWNvdmVyeV9wcmVmZXRjaCBiZWZvcmUgc2xlZXBpbmcuICovCi0J CQkJCVhMb2dQcmVmZXRjaGVyQ29tcHV0ZVN0YXRzKHhsb2dwcmVmZXRjaGVyKTsKKwkJCQkJaWYg KEFtV2FsUGlwZWxpbmUoKSkKKwkJCQkJCVhMb2dQcmVmZXRjaGVyQ29tcHV0ZVN0YXRzKHhsb2dw cmVmZXRjaGVyX3BpcGVsaW5lZCk7CisJCQkJCWVsc2UKKwkJCQkJCVhMb2dQcmVmZXRjaGVyQ29t cHV0ZVN0YXRzKHhsb2dwcmVmZXRjaGVyKTsKIAogCQkJCQkvKgogCQkJCQkgKiBXYWl0IGZvciBt b3JlIFdBTCB0byBhcnJpdmUsIHdoZW4gd2Ugd2lsbCBiZSB3b2tlbgpAQCAtNDAwMiw2ICs0Mjg2 LDggQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVjUHRyLCBib29s IHJhbmRBY2Nlc3MsCiAJCSAqIHByb2Nlc3MuCiAJCSAqLwogCQlQcm9jZXNzU3RhcnR1cFByb2NJ bnRlcnJ1cHRzKCk7CisJCWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwkJCVByb2Nlc3NQaXBl bGluZUJnd0ludGVycnVwdHMoKTsKIAl9CiAKIAlyZXR1cm4gWExSRUFEX0ZBSUw7CQkJLyogbm90 IHJlYWNoZWQgKi8KQEAgLTQxNjYsNiArNDQ1Miw3IEBAIHJlc2NhbkxhdGVzdFRpbWVMaW5lKFRp bWVMaW5lSUQgcmVwbGF5VExJLCBYTG9nUmVjUHRyIHJlcGxheUxTTikKIAlyZWNvdmVyeVRhcmdl dFRMSSA9IG5ld3RhcmdldDsKIAlsaXN0X2ZyZWVfZGVlcChleHBlY3RlZFRMRXMpOwogCWV4cGVj dGVkVExFcyA9IG5ld0V4cGVjdGVkVExFczsKKwlQaXBlbGluZUNvbnN1bWVyZXhwZWN0ZWRUTEVz VXBkYXRlVExJKG5ld3RhcmdldCk7CiAKIAkvKgogCSAqIEFzIGluIFN0YXJ0dXBYTE9HKCksIHRy eSB0byBlbnN1cmUgd2UgaGF2ZSBhbGwgdGhlIGhpc3RvcnkgZmlsZXMKQEAgLTQyNTUsNiArNDU0 MiwxNSBAQCBYTG9nRmlsZVJlYWQoWExvZ1NlZ05vIHNlZ25vLCBUaW1lTGluZUlEIHRsaSwKIAkJ aWYgKHNvdXJjZSAhPSBYTE9HX0ZST01fU1RSRUFNKQogCQkJWExvZ1JlY2VpcHRUaW1lID0gR2V0 Q3VycmVudFRpbWVzdGFtcCgpOwogCisJCWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwkJewor CQkJLyogYWxzbyB1cGRhdGUgdGhlIHNoYXJlZCBzdGF0ZSAqLworCQkJU3BpbkxvY2tBY3F1aXJl KCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJCVhMb2dSZWNvdmVyeUN0bC0+WExvZ1Jl Y2VpcHRUaW1lID0gWExvZ1JlY2VpcHRUaW1lOworCQkJWExvZ1JlY292ZXJ5Q3RsLT5YTG9nUmVj ZWlwdFNvdXJjZSA9IFhMb2dSZWNlaXB0U291cmNlOworCQkJU3BpbkxvY2tSZWxlYXNlKCZYTG9n UmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJfQorCiAJCXJldHVybiBmZDsKIAl9CiAJaWYgKGVy cm5vICE9IEVOT0VOVCB8fCAhbm90Zm91bmRPaykgLyogdW5leHBlY3RlZCBmYWlsdXJlPyAqLwpA QCAtNDMzOSw3ICs0NjM1LDEwIEBAIFhMb2dGaWxlUmVhZEFueVRMSShYTG9nU2VnTm8gc2Vnbm8s IFhMb2dTb3VyY2Ugc291cmNlKQogCQkJewogCQkJCWVsb2coREVCVUcxLCAiZ290IFdBTCBzZWdt ZW50IGZyb20gYXJjaGl2ZSIpOwogCQkJCWlmICghZXhwZWN0ZWRUTEVzKQorCQkJCXsKIAkJCQkJ ZXhwZWN0ZWRUTEVzID0gdGxlczsKKwkJCQkJUGlwZWxpbmVDb25zdW1lcmV4cGVjdGVkVExFc1Vw ZGF0ZVRMSShyZWNvdmVyeVRhcmdldFRMSSk7CisJCQkJfQogCQkJCXJldHVybiBmZDsKIAkJCX0K IAkJfQpAQCAtNDM1MCw3ICs0NjQ5LDEwIEBAIFhMb2dGaWxlUmVhZEFueVRMSShYTG9nU2VnTm8g c2Vnbm8sIFhMb2dTb3VyY2Ugc291cmNlKQogCQkJaWYgKGZkICE9IC0xKQogCQkJewogCQkJCWlm ICghZXhwZWN0ZWRUTEVzKQorCQkJCXsKIAkJCQkJZXhwZWN0ZWRUTEVzID0gdGxlczsKKwkJCQkJ UGlwZWxpbmVDb25zdW1lcmV4cGVjdGVkVExFc1VwZGF0ZVRMSShyZWNvdmVyeVRhcmdldFRMSSk7 CisJCQkJfQogCQkJCXJldHVybiBmZDsKIAkJCX0KIAkJfQpAQCAtNDM3MiwxNiArNDY3NCw1MiBA QCBYTG9nRmlsZVJlYWRBbnlUTEkoWExvZ1NlZ05vIHNlZ25vLCBYTG9nU291cmNlIHNvdXJjZSkK IHZvaWQKIFN0YXJ0dXBSZXF1ZXN0V2FsUmVjZWl2ZXJSZXN0YXJ0KHZvaWQpCiB7CisKKwkvKgor CSAqIGN1cnJlbnRTb3VyY2UgaXMgYWxzbyBkZWZpbmVkIGFzIHBpcGVsaW5lIHNoYXJlZCBzdGF0 ZSB2YXJpYWJsZS4KKwkgKiBVcGRhdGUgdGhlIHN0YXRlIGJlZm9yZSBwcm9jZWRkaW5nLgorCSAq LworCWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmWExv Z1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCWN1cnJlbnRTb3VyY2UgPSBYTG9nUmVjb3ZlcnlD dGwtPmN1cnJlbnRTb3VyY2U7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5p bmZvX2xjayk7CisJfQorCiAJaWYgKGN1cnJlbnRTb3VyY2UgPT0gWExPR19GUk9NX1NUUkVBTSAm JiBXYWxSY3ZSdW5uaW5nKCkpCiAJewogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJXQUwg cmVjZWl2ZXIgcHJvY2VzcyBzaHV0ZG93biByZXF1ZXN0ZWQiKSkpOwogCiAJCXBlbmRpbmdXYWxS Y3ZSZXN0YXJ0ID0gdHJ1ZTsKKworCQkvKgorCQkgKiBwZW5kaW5nV2FsUmN2UmVzdGFydCBpcyBh bHNvIGRlZmluZWQgYXMgcGlwZWxpbmUgc2hhcmVkIHN0YXRlIHZhcmlhYmxlLgorCQkgKiBVcGRh dGUgdGhlIHN0YXRlIGJlZm9yZSBwcm9jZWRkaW5nLgorCQkgKi8KKwkJaWYgKHdhbF9waXBlbGlu ZV9lbmFibGVkKQorCQl7CisJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5m b19sY2spOworCQkJWExvZ1JlY292ZXJ5Q3RsLT5wZW5kaW5nV2FsUmN2UmVzdGFydCA9IHBlbmRp bmdXYWxSY3ZSZXN0YXJ0OworCQkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmlu Zm9fbGNrKTsKKwkJfQogCX0KIH0KIAogCisvKgorICogc3RhbmRieVN0YXRlIGlzIGFsc28gZGVm aW5lZCBhcyBhIHNoYXJlZCBzdGF0ZS4gUGlwZWxpbmUgd29ya2VyIGNhbiBhbHNvCisgKiB1cGRh dGUgaXRzIHZhbHVlLCBzbyBhbHdheXMgY29uZmlybSB0aGUgc2hhcmVkIHN0YXRlIGJlZm9yZSBw cm9jZWRkaW5nLgorICovCit2b2lkCitTZXRTaGFyZWRIb3RTdGFuZGJ5U3RhdGUodm9pZCkKK3sK KwlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCVhMb2dSZWNv dmVyeUN0bC0+c3RhbmRieVN0YXRlID0gc3RhbmRieVN0YXRlOworCVNwaW5Mb2NrUmVsZWFzZSgm WExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7Cit9CisKKwogLyoKICAqIEhhcyBhIHN0YW5kYnkg cHJvbW90aW9uIGFscmVhZHkgYmVlbiB0cmlnZ2VyZWQ/CiAgKgpAQCAtNDQzMyw3ICs0NzcxLDcg QEAgQ2hlY2tGb3JTdGFuZGJ5VHJpZ2dlcih2b2lkKQogCWlmIChMb2NhbFByb21vdGVJc1RyaWdn ZXJlZCkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoSXNQcm9tb3RlU2lnbmFsZWQoKSAmJiBDaGVj a1Byb21vdGVTaWduYWwoKSkKKwlpZiAoQ2hlY2tQcm9tb3RlU2lnbmFsKCkpCiAJewogCQllcmVw b3J0KExPRywgKGVycm1zZygicmVjZWl2ZWQgcHJvbW90ZSByZXF1ZXN0IikpKTsKIAkJUmVtb3Zl UHJvbW90ZVNpZ25hbEZpbGVzKCk7CkBAIC00NDc2LDYgKzQ4MTQsNyBAQCB2b2lkCiBXYWtldXBS ZWNvdmVyeSh2b2lkKQogewogCVNldExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2Fr ZXVwTGF0Y2gpOworCVNldExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5QXBwbHlEZWxh eUxhdGNoKTsKIH0KIAogLyoKQEAgLTQ2NDUsNiArNDk4NCwxNCBAQCBHZXRYTG9nUmVjZWlwdFRp bWUoVGltZXN0YW1wVHogKnJ0aW1lLCBib29sICpmcm9tU3RyZWFtKQogCSAqLwogCUFzc2VydChJ blJlY292ZXJ5KTsKIAorCWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwl7CisJCVNwaW5Mb2Nr QWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCVhMb2dSZWNlaXB0VGltZSA9 IFhMb2dSZWNvdmVyeUN0bC0+WExvZ1JlY2VpcHRUaW1lOworCQlYTG9nUmVjZWlwdFNvdXJjZSA9 IFhMb2dSZWNvdmVyeUN0bC0+WExvZ1JlY2VpcHRTb3VyY2U7CisJCVNwaW5Mb2NrUmVsZWFzZSgm WExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJfQorCiAJKnJ0aW1lID0gWExvZ1JlY2VpcHRU aW1lOwogCSpmcm9tU3RyZWFtID0gKFhMb2dSZWNlaXB0U291cmNlID09IFhMT0dfRlJPTV9TVFJF QU0pOwogfQpAQCAtNDczMCw2ICs1MDc3LDYwIEBAIFJlY292ZXJ5UmVxdWlyZXNJbnRQYXJhbWV0 ZXIoY29uc3QgY2hhciAqcGFyYW1fbmFtZSwgaW50IGN1cnJWYWx1ZSwgaW50IG1pblZhbHVlCiAJ fQogfQogCitzdGF0aWMgdm9pZAorSW5pdGlhbGl6ZVBpcGVsaW5lU3RhcnR1cEVudihXYWxQaXBl bGluZVBhcmFtcyAqcGFyYW1zKQoreworCS8qCisJICogVGhlc2UgcGFyYW1ldGVycyBhcmUgYWxy ZWFkeSBzZXQgZm9yIHRoZSBzdGFydHVwIHByb2Nlc3MgYnV0IG5vdCBmb3Igb3VyCisJICogcGlw ZWxpbmUgd29ya2VyLiBTbyBpbiBvcmRlciB0byBzdGFydCBkZWNvZGluZyB0aHJvdWdoIHRoZSBw aXBlbGluZSwKKwkgKiB0aGVzZSB2YXJpYWJsZXMgc2hvdWxkIGJlIHNhdmVkIGFuZCB0aGVuIHJl c3RvcmVkIGxhdGVyLgorCSAqLworCXBhcmFtcy0+TmV4dFJlY1B0ciA9IHhsb2dyZWFkZXItPk5l eHRSZWNQdHI7CisJcGFyYW1zLT5yZWNvdmVyeVRhcmdldFRMSSA9IHJlY292ZXJ5VGFyZ2V0VExJ OworCXBhcmFtcy0+U3RhbmRieU1vZGVSZXF1ZXN0ZWQgPSBTdGFuZGJ5TW9kZVJlcXVlc3RlZDsK KwlwYXJhbXMtPlN0YW5kYnlNb2RlID0gU3RhbmRieU1vZGU7CisJcGFyYW1zLT5BcmNoaXZlUmVj b3ZlcnlSZXF1ZXN0ZWQgPSBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQ7CisJcGFyYW1zLT5JbkFy Y2hpdmVSZWNvdmVyeSA9IEluQXJjaGl2ZVJlY292ZXJ5OworCXBhcmFtcy0+bWluUmVjb3ZlcnlQ b2ludFRMSSA9IG1pblJlY292ZXJ5UG9pbnRUTEk7CisJcGFyYW1zLT5taW5SZWNvdmVyeVBvaW50 ID0gbWluUmVjb3ZlcnlQb2ludDsKKwlwYXJhbXMtPkluUmVkbyA9IEluUmVkbzsKKwlwYXJhbXMt PmN1cnJlbnRTb3VyY2UgPSBjdXJyZW50U291cmNlOworCXBhcmFtcy0+bGFzdFNvdXJjZUZhaWxl ZCA9IGxhc3RTb3VyY2VGYWlsZWQ7CisJcGFyYW1zLT5wZW5kaW5nV2FsUmN2UmVzdGFydCA9IHBl bmRpbmdXYWxSY3ZSZXN0YXJ0OworCXBhcmFtcy0+UmVkb1N0YXJ0VExJID0gUmVkb1N0YXJ0VExJ OworCXBhcmFtcy0+Q2hlY2tQb2ludExvYyA9IENoZWNrUG9pbnRMb2M7CisJcGFyYW1zLT5DaGVj a1BvaW50VExJID0gQ2hlY2tQb2ludFRMSTsKKwlwYXJhbXMtPlJlZG9TdGFydExTTiA9IFJlZG9T dGFydExTTjsKKwlwYXJhbXMtPnN0YW5kYnlTdGF0ZSA9IHN0YW5kYnlTdGF0ZTsKKwlwYXJhbXMt PmZsdXNoZWRVcHRvID0gZmx1c2hlZFVwdG87CisJcGFyYW1zLT5yZWNlaXZlVExJID0gcmVjZWl2 ZVRMSTsKKwlwYXJhbXMtPmFib3J0ZWRSZWNQdHIgPSBhYm9ydGVkUmVjUHRyOworCXBhcmFtcy0+ bWlzc2luZ0NvbnRyZWNQdHIgPSBtaXNzaW5nQ29udHJlY1B0cjsKKwlwYXJhbXMtPmJhY2t1cEVu ZFJlcXVpcmVkID0gYmFja3VwRW5kUmVxdWlyZWQ7CisJcGFyYW1zLT5iYWNrdXBTdGFydFBvaW50 ID0gYmFja3VwU3RhcnRQb2ludDsKKwlwYXJhbXMtPmJhY2t1cEVuZFBvaW50ID0gYmFja3VwRW5k UG9pbnQ7CisJcGFyYW1zLT5jdXJGaWxlVExJID0gY3VyRmlsZVRMSTsKKworCS8qCisJICogVGhl IHBpcGVsaW5lIHdpbGwgZG8gdGhlIHdhaXRpbmcgaW4gdGhpcyBjYXNlIHN0YXJ0dXAgcHJvYyBz aG91bGQgZGlzb3duCisJICogdGhlIGxhdGNoLgorCSAqLworCURpc293blJlY292ZXJ5V2FrZXVw TGF0Y2goKTsKKworCS8qCisJICogVXBkYXRlIHNoYXJlZCBzdGF0ZSBiZWZvcmUgc3RhcnRpbmcu CisJICovCisJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwlY TG9nUmVjb3ZlcnlDdGwtPkluQXJjaGl2ZVJlY292ZXJ5ID0gSW5BcmNoaXZlUmVjb3Zlcnk7CisJ WExvZ1JlY292ZXJ5Q3RsLT5wZW5kaW5nV2FsUmN2UmVzdGFydCA9IHBlbmRpbmdXYWxSY3ZSZXN0 YXJ0OworCVhMb2dSZWNvdmVyeUN0bC0+YWJvcnRlZFJlY1B0ciA9IGFib3J0ZWRSZWNQdHI7CisJ WExvZ1JlY292ZXJ5Q3RsLT5taXNzaW5nQ29udHJlY1B0ciA9IG1pc3NpbmdDb250cmVjUHRyOwor CVhMb2dSZWNvdmVyeUN0bC0+Y3VycmVudFNvdXJjZSA9IGN1cnJlbnRTb3VyY2U7CisJWExvZ1Jl Y292ZXJ5Q3RsLT5zdGFuZGJ5U3RhdGUgPSBzdGFuZGJ5U3RhdGU7CisJWExvZ1JlY292ZXJ5Q3Rs LT5YTG9nUmVjZWlwdFNvdXJjZSA9IFhMb2dSZWNlaXB0U291cmNlOworCVhMb2dSZWNvdmVyeUN0 bC0+WExvZ1JlY2VpcHRUaW1lID0gWExvZ1JlY2VpcHRUaW1lOworCVNwaW5Mb2NrUmVsZWFzZSgm WExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7Cit9CiAKIC8qCiAgKiBQaXBlbGluZSBiZ3cgc2hv dWxkIGJlIGF3YXJlIG9mIGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0cyBiZWVuIGluaXRpYWxpemVk IGJ5CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKaW5kZXggZGU5MDkyZmRmNWIuLmY3ZjMxYTkx NmE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCkBAIC0xMTk3LDYgKzExOTcsNyBAQCBz dGFuZGJ5X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXJ1bm5pbmcueGlkcyA9IHhs cmVjLT54aWRzOwogCiAJCVByb2NBcnJheUFwcGx5UmVjb3ZlcnlJbmZvKCZydW5uaW5nKTsKKwkJ U2V0U2hhcmVkSG90U3RhbmRieVN0YXRlKCk7CiAKIAkJLyoKIAkJICogVGhlIHN0YXJ0dXAgcHJv Y2VzcyBjdXJyZW50bHkgaGFzIG5vIGNvbnZlbmllbnQgd2F5IHRvIHNjaGVkdWxlCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MveGxvZ3BpcGVsaW5lLmgKaW5kZXggYjRjZGUyNzNlMWMuLjdmZjEwMDU1MzkwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3hsb2dwaXBlbGluZS5oCkBAIC0xNDQsMTIgKzE0NCwyOCBAQCBleHRlcm4gUEdETExJ TVBPUlQgWExvZ1ByZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZDsKICAqIFB1Ymxp YyBBUEkgZnVuY3Rpb25zCiAgKi8KIAorLyogU3RhcnQvc3RvcCB0aGUgcGlwZWxpbmUgKi8KK2V4 dGVybiB2b2lkIFdhbFBpcGVsaW5lX1N0YXJ0KFdhbFBpcGVsaW5lUGFyYW1zICpwYXJhbXMpOwor ZXh0ZXJuIHZvaWQgV2FsUGlwZWxpbmVfU3RvcCh2b2lkKTsKKwogLyogUHJvZHVjZXIgZnVuY3Rp b25zIChjYWxsZWQgYnkgYmFja2dyb3VuZCB3b3JrZXIpICovCiBleHRlcm4gdm9pZCBXYWxQaXBl bGluZV9Qcm9kdWNlck1haW4oRGF0dW0gbWFpbl9hcmcpOwogZXh0ZXJuIGJvb2wgV2FsUGlwZWxp bmVfU2VuZFJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRlcm4gYm9vbCBXYWxQ aXBlbGluZV9TZW5kU2h1dGRvd24odm9pZCk7CiBleHRlcm4gYm9vbCBXYWxQaXBlbGluZV9TZW5k RXJyb3IoaW50IGVycmNvZGUsIGNvbnN0IGNoYXIgKmVycm1zZyk7CiAKKy8qIENvbnN1bWVyIGZ1 bmN0aW9ucyAoY2FsbGVkIGJ5IHN0YXJ0dXAgcHJvY2VzcykgKi8KK2V4dGVybiBEZWNvZGVkWExv Z1JlY29yZCAqV2FsUGlwZWxpbmVfUmVjZWl2ZVJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnN0YXJ0 dXBfcmVhZGVyLCBib29sIGZpcnN0X2l0ZXJhdGlvbik7CitleHRlcm4gYm9vbCBXYWxQaXBlbGlu ZV9DaGVja1Byb2R1Y2VyQWxpdmUodm9pZCk7CisKKy8qIFN0YXR1cyBhbmQgbW9uaXRvcmluZyAq LworZXh0ZXJuIGJvb2wgV2FsUGlwZWxpbmVfSXNBY3RpdmUodm9pZCk7CitleHRlcm4gdm9pZCBX YWxQaXBlbGluZV9XYWl0Rm9yQ29uc3VtZXJDYXRjaHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgV2Fs UGlwZWxpbmVfR2V0U3RhdHModWludDY0ICpyZWNvcmRzX3NlbnQsIHVpbnQ2NCAqcmVjb3Jkc19y ZWNlaXZlZCwKKwkJCQkJCQkJICBYTG9nUmVjUHRyICpwcm9kdWNlcl9sc24sIFhMb2dSZWNQdHIg KmNvbnN1bWVyX2xzbik7CitleHRlcm4gYm9vbCBBbVdhbFBpcGVsaW5lKHZvaWQpOworCisKIGV4 dGVybiB2b2lkIFByb2Nlc3NQaXBlbGluZUJnd0ludGVycnVwdHModm9pZCk7CiAKIC8qIEdsb2Jh bCBzaGFyZWQgbWVtb3J5IHBvaW50ZXIgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy94bG9ncmVjb3ZlcnkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaAppbmRl eCA4Yjk0M2I4ZjM5NS4uODBhMjViMmRlZTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy94bG9ncmVjb3ZlcnkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgK QEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIgog I2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGls cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgImxpYi9zdHJp bmdpbmZvLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKQEAgLTEw Niw2ICsxMDcsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgWExvZ1JlY292ZXJ5Q3RsRGF0YQogCSAqLwog CUxhdGNoCQlyZWNvdmVyeVdha2V1cExhdGNoOwogCisJLyoKKwkgKiBJbiBjYXNlIHBpcGVsaW5l IGVuYWJsZWQgd2Ugd2lsbCBuZWVkIHR3byBsYXRjaGVzLiBPbmUgdGhhdCBjYW4gYmUgdXNlZAor CSAqIGJ5IHRoZSBwaXBlbGluZSBmb3IgV0FMIHdhaXRpbmcgYW5kIG90aGVyIHRoYXQgY2FuIGJl IHVzZWQgYnkgdGhlCisJICogc3RhcnR1cCBwcm9jZXNzIGZvciB0aGUgYXBwbHkgZGVsYXkKKwkg Ki8KKwlMYXRjaAkJcmVjb3ZlcnlBcHBseURlbGF5TGF0Y2g7CisKIAkvKgogCSAqIExhc3QgcmVj b3JkIHN1Y2Nlc3NmdWxseSByZXBsYXllZC4KIAkgKi8KQEAgLTEzMyw2ICsxNDEsNDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgWExvZ1JlY292ZXJ5Q3RsRGF0YQogCUNvbmRpdGlvblZhcmlhYmxlIHJlY292 ZXJ5Tm90UGF1c2VkQ1Y7CiAKIAlzbG9ja190CQlpbmZvX2xjazsJCS8qIGxvY2tzIHNoYXJlZCB2 YXJpYWJsZXMgc2hvd24gYWJvdmUgKi8KKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFZhcmlhYmxlcyB1 c2UgZm9yIElQQyBiZXR3ZWVuIHBpcGVsaW5lIGFuZCB0aGUgc3RhcnR1cCBwcm9jLgorCSAqIFRo ZXNlIGFyZSBhbHNvIHRoZSBzdGF0aWMgdmFyaWFibGVzIGluIHhsb2dyZWNvdmVyeS5jIGJ1dCB0 aGVyZSB2YWx1ZXMKKwkgKiBrZWVwIG9uIGNoYW5naW5nLiBTbyB3ZSBhZGRlZCB0aGVuIGluIHRo ZSBzaGFyZWQgbWVtb3J5IHNvIHRoYXQgYm90aAorCSAqIHRoZSBwaXBlbGluZSBhbmQgdGhlIHN0 YXJ0dXAgcHJvYyBzdGF5IHN5bmNlZCBvbiBhbnkgb2YgdGhpcyBzdGF0ZQorCSAqIGNoYW5nZQor CSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCSAqLworCisJLyoKKwkgKiBQaXBlbGluZSBjb3VsZCBiZSB3YWl0aW5n IGZvciB0aGUgc3RhcnR1cCBwcm9jZXNzIHRvIGNhdGNodXAgd2l0aCB0aGUKKwkgKiBkZWNvZGVy LiBUaGlzIGNvdWxkIGhhcHBlbmQgd2hlbiBubyB3YWl0IHdhbCBpcyBhdmFpbGFibGUgZnJvbSB0 aGUKKwkgKiBjdXJyZW50IHJlc291cmNlIGFuZCBub3cgcGlwbGluZSBoYXZlIGNoYW5nZSB0aGUg d2FsIHNyb3VjZQorCSAqIGkuZSBlbmFibGluZyBzdGFuZGJ5IGlmIHJlcXVlc3RlZC4KKwkgKi8K Kwlib29sCQlwaXBlbGluZV93YWl0aW5nOworCWJvb2wJCUluQXJjaGl2ZVJlY292ZXJ5OworCWJv b2wJCXBlbmRpbmdXYWxSY3ZSZXN0YXJ0OworCWJvb2wJCXN0YW5ieUVuYWJsZWQ7CisKKwkvKiBU aGUgdGFyZ2V0IFRMSSBmb3Igd2hpY2ggZXhwZWN0ZWRUTEVzIHNob3VsZCBiZSByZWNvbXB1dGVk ICovCisJVGltZUxpbmVJRAlleHBlY3RlZFRMRXNVcGRhdGVUTEk7CisKKwkvKgorCSAqIE5vcm1h bHkgd2Ugd2FrZXVwIHdhbHJjdnIgYWZ0ZXIgc3BlY2lmaWMgcmVjb3JkcyBoYXZlIGJlZW4gYXBw bGllZCwgYXMKKwkgKiByZWFkcyBhcmUgc2VxdWVudGlhbCBzbyB3ZSB3a2FldXAgYWZ0ZXIgc3Bl Y2lmaWMgcmVhZC4gQnV0IGluIGNhc2Ugb2YgcGlwZWxpbmUKKwkgKiByZWFkcyAoZGVjb2RlZCBy ZWNvcmRzKSBjb3VsZCBiZSB3YXkgYWhlYWQgb2YgdGhlIGNvbnN1bWVyLiBXZSBjYW5ub3Qgd2Fr ZXVwCisJICogd2FsIHJjdnIgYmFzZWQgb24gcmVhZCwgc28gd2UgdGVsbCBjb25zdW1lciB0byB3 YWt1cCBhZnRlciBhcGxsaWVkIHJlY29yZHMKKwkgKiB1cHRvIGZsdXNoZWRVcHRvUmVjUHRyCisJ ICovCisJWExvZ1JlY1B0cglmbHVzaGVkVXB0b1JlY1B0cjsKKwlYTG9nUmVjUHRyCWFib3J0ZWRS ZWNQdHI7CisJWExvZ1JlY1B0cgltaXNzaW5nQ29udHJlY1B0cjsKKworCVhMb2dTb3VyY2UJY3Vy cmVudFNvdXJjZTsKKwlYTG9nU291cmNlCVhMb2dSZWNlaXB0U291cmNlOworCisJSG90U3RhbmRi eVN0YXRlIHN0YW5kYnlTdGF0ZTsKKwlUaW1lc3RhbXBUegkJWExvZ1JlY2VpcHRUaW1lOwogfSBY TG9nUmVjb3ZlcnlDdGxEYXRhOwogCiBleHRlcm4gUEdETExJTVBPUlQgWExvZ1JlY292ZXJ5Q3Rs RGF0YSAqWExvZ1JlY292ZXJ5Q3RsOwpAQCAtMjM5LDYgKzI4Nyw4IEBAIGV4dGVybiBpbnQgWExv Z1BhZ2VSZWFkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwgWExvZ1JlY1B0ciB0YXJnZXRQ YWdlUHRyLCBpCiBleHRlcm4gYm9vbCBQcm9tb3RlSXNUcmlnZ2VyZWQodm9pZCk7CiBleHRlcm4g Ym9vbCBDaGVja1Byb21vdGVTaWduYWwodm9pZCk7CiBleHRlcm4gdm9pZCBXYWtldXBSZWNvdmVy eSh2b2lkKTsKK2V4dGVybiB2b2lkIERpc293blJlY292ZXJ5V2FrZXVwTGF0Y2godm9pZCk7Citl eHRlcm4gdm9pZCBTZXRTaGFyZWRIb3RTdGFuZGJ5U3RhdGUodm9pZCk7CiAKIGV4dGVybiB2b2lk IFN0YXJ0dXBSZXF1ZXN0V2FsUmVjZWl2ZXJSZXN0YXJ0KHZvaWQpOwogZXh0ZXJuIHZvaWQgWExv Z1JlcXVlc3RXYWxSZWNlaXZlclJlcGx5KHZvaWQpOwotLSAKMi40OS4wCgo= --00000000000013c8b6064ef100c4 Content-Type: application/octet-stream; name="v3-0001-Pipelined-Recovery-Producer.patch" Content-Disposition: attachment; filename="v3-0001-Pipelined-Recovery-Producer.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpx4c5w1 RnJvbSAzNzE0MjE5ZGRlNzI4NTdjMDMzZDAwMjljOGVmOWIzMGNhNzJmNTc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnphaGVlckBjeWJlcnRlYy5h dD4KRGF0ZTogVHVlLCA3IEFwciAyMDI2IDE0OjQwOjE1ICswNTAwClN1YmplY3Q6IFtQQVRDSCB2 MyAxLzJdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIFByb2R1Y2VyCgpUaGlzIGluY2x1ZGVzIHRoZSBw cm9kdWNlciBzcGVjaWZpYyBjb2RlIGZvciB0aGUgcHJvZHVjZXItY29uc3VtZXIKYXJjaGl0ZWN0 dXJlIGZvciBXQUwgcmVwbGF5IHRoYXQgc2VwYXJhdGVzIFdBTCBkZWNvZGluZyBmcm9tIHRoZSBy ZWNvdmVyeSBwcm9jZXNzLAplbmFibGluZyBwYXJhbGxlbCBwcm9jZXNzaW5nIGJldHdlZW4gZGlm ZmVyZW10IHN0ZXBzIG9mIHJlcGxheS4KClRoZSBwcm9kdWNlciBpbmNsdWRlcyBhIGJhY2tncm91 bmQgd29ya2VyIHRoYXQgcmVhZHMgYW5kIGRlY29kZXMgV0FMIHJlY29yZHMsCnRoZW4gc2VuZCB0 aGVtIHRvIHRoZSBzdGFydHVwIHByb2Nlc3MgZm9yIHRoZSByZWRvLiBJUEMgaGFwcGVucyB2aWEg c2hhcmVkCiBtZW1vcnkgbWVzc2FnZSBxdWV1ZXMgKHNobV9tcSksIGFsbG93aW5nIHRoZSBkZWNv ZGVyIHRvIHJ1biBhaGVhZCBvZiB0aGUgYXBwbHkgcHJvY2Vzcy4KClRoaXMgcHJvdmlkZXMgc29t ZSBpbXByb3ZlbWVudCBpbiByZWNvdmVyeSBwZXJmb3JtYW5jZSBmb3IgQ1BVLWJvdW5kIHdvcmts b2Fkcy4KCk5ldyBHVUM6IHdhbF9waXBlbGluZSAoZGVmYXVsdDogb2ZmKQoKQXV0aG9yOiBJbXJh biBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpJZGVhIGJ5OiBBbnRzIEFhc21hIDxhbnRz QGN5YmVydGVjLmF0PgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL01ha2VmaWxlICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tZXNvbi5idWlsZCAg ICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVsaW5lLmMg ICAgIHwgNTc3ICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3JlY292ZXJ5LmMgICAgIHwgIDU3ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29y a2VyLmMgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFy YW1ldGVycy5kYXQgICAgIHwgIDE1ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSB8ICAgMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oICAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dwaXBlbGluZS5oICAg ICAgICAgICAgIHwgMTU4ICsrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5Lmgg ICAgICAgICAgICAgfCAgMTkgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0Lmgg ICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkICAgICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWNvdmVyeS90LzA1M193YWxwaXBlbGluZS5wbCAg ICAgICAgfCAyMDggKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgMTAzNiBpbnNlcnRpb25zKCsp LCAxMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9ncGlwZWxpbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2Fj Y2Vzcy94bG9ncGlwZWxpbmUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlY292ZXJ5 L3QvMDUzX3dhbHBpcGVsaW5lLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9NYWtlZmlsZQppbmRl eCBhMzJmNDczZTBhMi4uYmEwYmYzNDM3NjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL01ha2Vm aWxlCkBAIC0zMiw2ICszMiw3IEBAIE9CSlMgPSBcCiAJeGxvZ2JhY2t1cC5vIFwKIAl4bG9nZnVu Y3MubyBcCiAJeGxvZ2luc2VydC5vIFwKKwl4bG9ncGlwZWxpbmUubyBcCiAJeGxvZ3ByZWZldGNo ZXIubyBcCiAJeGxvZ3JlYWRlci5vIFwKIAl4bG9ncmVjb3ZlcnkubyBcCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL21lc29uLmJ1aWxkCmluZGV4IDA2YWFkYzdmMzE1Li5iZTM3YjQwNTgxZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKQEAgLTIwLDYgKzIwLDcgQEAgYmFj a2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAneGxvZ2JhY2t1cC5jJywKICAgJ3hsb2dmdW5jcy5j JywKICAgJ3hsb2dpbnNlcnQuYycsCisgICd4bG9ncGlwZWxpbmUuYycsCiAgICd4bG9ncHJlZmV0 Y2hlci5jJywKICAgJ3hsb2dyZWNvdmVyeS5jJywKICAgJ3hsb2dzdGF0cy5jJywKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwaXBlbGluZS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjNmNDgyYzZiYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVsaW5lLmMKQEAgLTAsMCArMSw1NzcgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHhsb2dwaXBlbGluZS5jCisgKiAgICBXQUwgcmVwbGF5IHBp cGVsaW5lIGltcGxlbWVudGF0aW9uCisgKgorICogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIHBy b2R1Y2VyLWNvbnN1bWVyIHBpcGVsaW5lIGZvciBXQUwgcmVwbGF5LgorICogVGhlIHByb2R1Y2Vy IChiYWNrZ3JvdW5kIHdvcmtlcikgcmVhZHMgYW5kIGRlY29kZXMgV0FMIHJlY29yZHMgaW4gcGFy YWxsZWwKKyAqIHdpdGggdGhlIGNvbnN1bWVyIChzdGFydHVwIHByb2Nlc3MpIHRoYXQgYXBwbGll cyB0aGVtLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKiAg ICBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYworICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPGZjbnRs Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtX3hsb2cu aCIKKyNpbmNsdWRlICJhY2Nlc3Mvcm1nci5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisj aW5jbHVkZSAiYWNjZXNzL3hsb2dwaXBlbGluZS5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncHJl ZmV0Y2hlci5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAiYWNj ZXNzL3hsb2dyZWNvcmQuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCisjaW5j bHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFs LmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVk ZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3RhcnR1cC5o IgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIK KyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisj aW5jbHVkZSAic3RvcmFnZS9tZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zaG1fbXEuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV90b2Mu aCIKKyNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3Rl bXMuaCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvZWxvZy5o IgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVzb3duZXIu aCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCisK KworCisvKiBHbG9iYWwgc2hhcmVkIG1lbW9yeSBjb250cm9sIHN0cnVjdHVyZSAqLworV2FsUGlw ZWxpbmVTaG1DdGwgKldhbFBpcGVsaW5lU2htID0gTlVMTDsKKworc3RhdGljIHZvaWQgV2FsUGlw ZWxpbmVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFdhbFBpcGVsaW5lU2ht ZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFdhbFBpcGVsaW5lU2ht ZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBXYWxQaXBlbGluZVNobWVtUmVxdWVzdCwK KwkuaW5pdF9mbiA9IFdhbFBpcGVsaW5lU2htZW1Jbml0LAorfTsKKworWExvZ1ByZWZldGNoZXIg Knhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZCA9IE5VTEw7CisKKy8qIExvY2FsIHN0YXRlIGZvciBw cm9kdWNlciAqLworc3RhdGljIGRzbV9zZWdtZW50ICpwcm9kdWNlcl9kc21fc2VnID0gTlVMTDsK K3N0YXRpYyBzaG1fbXEgKnByb2R1Y2VyX21xID0gTlVMTDsKK3N0YXRpYyBzaG1fbXFfaGFuZGxl ICpwcm9kdWNlcl9tcV9oYW5kbGUgPSBOVUxMOworCisKKy8qCisgKiBGbGFncyBzZXQgYnkgaW50 ZXJydXB0IGhhbmRsZXJzIGZvciBsYXRlciBzZXJ2aWNlIGluIHRoZSByZWRvIGxvb3AuCisgKi8K K3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgZ290X1NJR0hVUCA9IGZhbHNlOworCisvKiBT aWduYWwgaGFuZGxlcnMgKi8KK3N0YXRpYyB2b2lkIFBpcGVsaW5lQmd3U2lnSHVwSGFuZGxlcihT SUdOQUxfQVJHUyk7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdGF0aWMgdm9pZCB3 YWxfcGlwZWxpbmVfY2xlYW51cF9jYWxsYmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKTsKK3N0YXRp YyBTaXplIHNlcmlhbGl6ZV93YWxfcmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkLCBjaGFy ICoqYnVmZmVyKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBfcHJvZHVjZXJfcmVzb3VyY2VzKHZvaWQp Oworc3RhdGljIHZvaWQgY2xlYW51cF9jb25zdW1lcl9yZXNvdXJjZXModm9pZCk7CisKKy8qIGNv cGllZCBmcm9tIHhsb2dyZWNvdmVyeS5jICovCisvKiBQYXJhbWV0ZXJzIHBhc3NlZCBkb3duIGZy b20gUmVhZFJlY29yZCB0byB0aGUgWExvZ1BhZ2VSZWFkIGNhbGxiYWNrLiAqLwordHlwZWRlZiBz dHJ1Y3QgWExvZ1BhZ2VSZWFkUHJpdmF0ZQoreworCWludAkJCWVtb2RlOworCWJvb2wJCWZldGNo aW5nX2NrcHQ7CS8qIGFyZSB3ZSBmZXRjaGluZyBhIGNoZWNrcG9pbnQgcmVjb3JkPyAqLworCWJv b2wJCXJhbmRBY2Nlc3M7CisJVGltZUxpbmVJRAlyZXBsYXlUTEk7Cit9IFhMb2dQYWdlUmVhZFBy aXZhdGU7CisKKworLyoKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgZm9yIFdBTCBQaXBlbGlu ZQorICovCitzdGF0aWMgdm9pZAorV2FsUGlwZWxpbmVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQor eworCVNobWVtUmVxdWVzdFN0cnVjdCgubmFtZSA9ICJXQUwgUGlwZWxpbmUgQ3RsIiwKKwkJCQkJ ICAgLnNpemUgPSBzaXplb2YoV2FsUGlwZWxpbmVTaG1DdGwpLAorCQkJCQkgICAucHRyID0gKHZv aWQgKiopICZXYWxQaXBlbGluZVNobSwKKwkJKTsKK30KKworc3RhdGljIHZvaWQKK1dhbFBpcGVs aW5lU2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwltZW1zZXQoV2FsUGlwZWxpbmVTaG0sIDAsIHNp emVvZihXYWxQaXBlbGluZVNobUN0bCkpOworCisJU3BpbkxvY2tJbml0KCZXYWxQaXBlbGluZVNo bS0+bXV0ZXgpOworfQorCisKKy8qCisgKiBQcm9kdWNlciBGdW5jdGlvbi4KKyAqIE1haW4gbG9v cCBmb3IgdGhlIHByb2R1Y2VyIGJhY2tncm91bmQgd29ya2VyLgorICovCit2b2lkCitXYWxQaXBl bGluZV9Qcm9kdWNlck1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJZHNtX2hhbmRsZSAgICAgICAg ICAgaGFuZGxlID0gRGF0dW1HZXRVSW50MzIobWFpbl9hcmcpOworCWRzbV9zZWdtZW50ICAgICAg ICAJKnNlZzsKKwlzaG1fdG9jICAgICAgICAgICAgCSp0b2M7CisJV2FsUGlwZWxpbmVQYXJhbXMg IAkqcGFyYW1zOworCVhMb2dSZWFkZXJTdGF0ZSAgICAJKnhsb2dyZWFkZXI7CisJWExvZ1BhZ2VS ZWFkUHJpdmF0ZSAqcHJpdmF0ZTsKKwlYTG9nUmVjb3JkICAgICAgICAgCSpyZWNvcmQ7CisJVGlt ZUxpbmVJRCAgICAgICAgICAgcmVwbGF5VExJID0gMDsKKwlib29sIAkJCQkgZW5kX29mX3dhbCA9 IGZhbHNlOworCXVpbnQ2NAkJCQkgcmVjb3Jkc19zZW50OworCXVpbnQ2NAkJCQkgcmVjb3Jkc19y ZWNlaXZlZDsKKworCS8qCisJICogUHJvcGVybHkgYWNjZXB0IG9yIGlnbm9yZSBzaWduYWxzIHRo ZSBwb3N0bWFzdGVyIG1pZ2h0IHNlbmQgdXMuCisJICovCisJcHFzaWduYWwoU0lHSFVQLCBQaXBl bGluZUJnd1NpZ0h1cEhhbmRsZXIpOyAJLyogcmVsb2FkIGNvbmZpZyBmaWxlICovCisKKwkvKiBS ZWdpc3RlciBjbGVhbnVwIGNhbGxiYWNrICovCisJYmVmb3JlX3NobWVtX2V4aXQod2FsX3BpcGVs aW5lX2NsZWFudXBfY2FsbGJhY2ssIChEYXR1bSkgMCk7CisKKwlzZWcgPSBkc21fYXR0YWNoKGhh bmRsZSk7CisJaWYgKHNlZyA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2co Ilt3YWxwaXBlbGluZV0gcHJvZHVjZXI6IGNvdWxkIG5vdCBtYXAgZHluYW1pYyBzaGFyZWQgbWVt b3J5IHNlZ21lbnQiKSkpOworCisJdG9jID0gc2htX3RvY19hdHRhY2goUEdfV0FMX1BJUEVMSU5F X01BR0lDLCBkc21fc2VnbWVudF9hZGRyZXNzKHNlZykpOworCWlmICh0b2MgPT0gTlVMTCkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVR VUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJbd2FscGlwZWxpbmVdIHByb2R1Y2VyOiBiYWQg bWFnaWMgbnVtYmVyIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IikpKTsKKworCS8q IExvb2t1cCBwYXJhbXMgYW5kIHF1ZXVlICovCisJcGFyYW1zID0gc2htX3RvY19sb29rdXAodG9j LCAxLCBmYWxzZSk7CisJcHJvZHVjZXJfbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIDIsIGZhbHNl KTsKKworCS8qIFNldCB1cCBwcm9kdWNlciBzaWRlIG9mIHF1ZXVlICovCisJcHJvZHVjZXJfZHNt X3NlZyA9IHNlZzsKKwlzaG1fbXFfc2V0X3NlbmRlcihwcm9kdWNlcl9tcSwgTXlQcm9jKTsKKwlw cm9kdWNlcl9tcV9oYW5kbGUgPSBzaG1fbXFfYXR0YWNoKHByb2R1Y2VyX21xLCBzZWcsIE5VTEwp OworCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCVdhbFBpcGVs aW5lU2htLT5wcm9kdWNlcl9waWQgPSBNeVByb2NQaWQ7CisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQ aXBlbGluZVNobS0+bXV0ZXgpOworCisJLyogRFNNIGlzIG5vdyBhdHRhY2hlZCwgc28gc2FmZSB0 byB1bmJsb2NrIHRoZSBzaWduYWxzICovCisJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxz KCk7CisKKwkvKiBTZXQgdXAgV0FMIHJlYWRpbmcgcHJvY2Vzc29yICovCisJcHJpdmF0ZSA9IHBh bGxvYzAoc2l6ZW9mKFhMb2dQYWdlUmVhZFByaXZhdGUpKTsKKwl4bG9ncmVhZGVyID0KKwkJWExv Z1JlYWRlckFsbG9jYXRlKHdhbF9zZWdtZW50X3NpemUsIE5VTEwsCisJCQkJCQkgICBYTF9ST1VU SU5FKC5wYWdlX3JlYWQgPSAmWExvZ1BhZ2VSZWFkLAorCQkJCQkJCQkJICAuc2VnbWVudF9vcGVu ID0gTlVMTCwKKwkJCQkJCQkJCSAgLnNlZ21lbnRfY2xvc2UgPSB3YWxfc2VnbWVudF9jbG9zZSks CisJCQkJCQkgICBwcml2YXRlKTsKKworCWlmICgheGxvZ3JlYWRlcikKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJtc2coIm91 dCBvZiBtZW1vcnkiKSwKKwkJCQkgZXJyZGV0YWlsKCJGYWlsZWQgd2hpbGUgYWxsb2NhdGluZyBh IFdBTCByZWFkaW5nIHByb2Nlc3Nvci4iKSkpOworCXhsb2dyZWFkZXItPnN5c3RlbV9pZGVudGlm aWVyID0gR2V0U3lzdGVtSWRlbnRpZmllcigpOworCisJLyoKKwkgKiBTZXQgdGhlIFdBTCBkZWNv ZGUgYnVmZmVyIHNpemUuICBUaGlzIGxpbWl0cyBob3cgZmFyIGFoZWFkIHdlIGNhbiByZWFkCisJ ICogaW4gdGhlIFdBTC4KKwkgKi8KKwlYTG9nUmVhZGVyU2V0RGVjb2RlQnVmZmVyKHhsb2dyZWFk ZXIsIE5VTEwsIHdhbF9kZWNvZGVfYnVmZmVyX3NpemUpOworCisJLyogSW5pdCBzb21lIGltcG9y dGFudCBnbG9iYWxzIGJlZm9yZSBzdGFydGluZyAqLworCXJlcGxheVRMSSA9IHBhcmFtcy0+UmVw bGF5VExJOworCUluaXRpYWxpemVQaXBlbGluZVJlY292ZXJ5RW52KHBhcmFtcyk7CisKKwkvKiBS ZWluaXQgdGhlIFdBTCBwcmVmZXRjaGVyLiAqLworCXhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZCA9 IFhMb2dQcmVmZXRjaGVyQWxsb2NhdGUoeGxvZ3JlYWRlcik7CisKKworCWVsb2coTE9HLCAiW3dh bHBpcGVsaW5lXSBwcm9kdWNlcjogc3RhcnRlZCBhdCAlWC8lWCwgVExJICV1IiwKKwkJIExTTl9G T1JNQVRfQVJHUyhwYXJhbXMtPk5leHRSZWNQdHIpLCByZXBsYXlUTEkpOworCisJWExvZ1ByZWZl dGNoZXJCZWdpblJlYWQoeGxvZ3ByZWZldGNoZXJfcGlwZWxpbmVkLCBwYXJhbXMtPk5leHRSZWNQ dHIpOworCisJLyogTWFpbiBkZWNvZGluZyBsb29wICovCisJd2hpbGUgKHRydWUpCisJeworCQli b29sIHNodXRkb3duX3JlcXVlc3RlZDsKKworCQkvKiBDaGVjayBpZiBjb25zdW1lciByZXF1ZXN0 ZWQgc2h1dGRvd24gKi8KKwkJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgp OworCQlzaHV0ZG93bl9yZXF1ZXN0ZWQgPSBXYWxQaXBlbGluZVNobS0+c2h1dGRvd25fcmVxdWVz dGVkOworCQlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwkJaWYg KHNodXRkb3duX3JlcXVlc3RlZCkKKwkJeworCQkJZWxvZyhERUJVRzEsICJbd2FscGlwZWxpbmVd IHByb2R1Y2VyOiBzaHV0ZG93biByZXF1ZXN0ZWQgYnkgY29uc3VtZXIiKTsKKwkJCWJyZWFrOwor CQl9CisKKwkJLyogUmVhZCBuZXh0IFdBTCByZWNvcmQgKi8KKwkJcmVjb3JkID0gUmVhZFJlY29y ZCh4bG9ncHJlZmV0Y2hlcl9waXBlbGluZWQsIExPRywgZmFsc2UsIHJlcGxheVRMSSk7CisKKwkJ aWYgKHJlY29yZCA9PSBOVUxMKQorCQl7CisJCQllbmRfb2Zfd2FsID0gdHJ1ZTsKKwkJCWVsb2co REVCVUcxLCAiW3dhbHBpcGVsaW5lXSBwcm9kdWNlcjogcmVhY2hlZCBlbmQgb2YgV0FMIik7CisJ CQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFN1Y2Nlc3NmdWxseSBkZWNvZGVkIGEgcmVjb3Jk LiBTZW5kIGl0IHRvIHRoZSBjb25zdW1lci4KKwkJICovCisJCWlmICghV2FsUGlwZWxpbmVfU2Vu ZFJlY29yZCh4bG9ncmVhZGVyKSkKKwkJeworCQkJZWxvZyhXQVJOSU5HLCAiW3dhbHBpcGVsaW5l XSBwcm9kdWNlcjogZmFpbGVkIHRvIHNlbmQgcmVjb3JkLCBxdWV1ZSBmdWxsIG9yIGRldGFjaGVk Iik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFVwZGF0ZSBvdXIgcG9zaXRpb24gZm9yIG1vbml0 b3JpbmcgKi8KKwkJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCQlX YWxQaXBlbGluZVNobS0+cHJvZHVjZXJfbHNuID0geGxvZ3JlYWRlci0+RW5kUmVjUHRyOworCQlT cGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKKwl9CisKKworCWlmIChlbmRfb2Zfd2FsKQorCXsKKwkJLyogTm90aWZ5IGNv bnN1bWVyIHdlIG5lZWQgdG8gZXhpdCBlYXJseSAqLworCQlXYWxQaXBlbGluZV9TZW5kU2h1dGRv d24oKTsKKworCQkvKiB3YWl0IHVudGlsIGNvbnN1bWVyIHNldCB0aGUgZmxhZyAqLworCQlXYWxQ aXBlbGluZV9XYWl0Rm9yQ29uc3VtZXJTaHV0ZG93blJlcXVlc3QoKTsKKwl9CisKKwlTcGluTG9j a0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJcmVjb3Jkc19zZW50ID0gV2FsUGlw ZWxpbmVTaG0tPnJlY29yZHNfc2VudDsKKwlyZWNvcmRzX3JlY2VpdmVkID0gV2FsUGlwZWxpbmVT aG0tPnJlY29yZHNfcmVjZWl2ZWQ7CisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+ bXV0ZXgpOworCisJZWxvZyhMT0csICJbd2FscGlwZWxpbmVdIHByb2R1Y2VyOiBleGl0aW5nOiBz ZW50PSIgVUlOVDY0X0ZPUk1BVCAiIHJlY2VpdmVkPSIgVUlOVDY0X0ZPUk1BVCwKKwkJIHJlY29y ZHNfc2VudCwgcmVjb3Jkc19yZWNlaXZlZCk7CisKKwkvKiBDbGVhbnVwICovCisJWExvZ1JlYWRl ckZyZWUoeGxvZ3JlYWRlcik7CisJRGlzb3duUmVjb3ZlcnlXYWtldXBMYXRjaCgpOworCXBmcmVl KHByaXZhdGUpOworCWNsZWFudXBfcHJvZHVjZXJfcmVzb3VyY2VzKCk7Cit9CisKKy8qCisgKiBQ cm9kdWNlciBGdW5jdGlvbi4KKyAqIFNlbmQgYSBkZWNvZGVkIFdBTCByZWNvcmQgdG8gdGhlIGNv bnN1bWVyCisgKi8KK2Jvb2wKK1dhbFBpcGVsaW5lX1NlbmRSZWNvcmQoWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpCit7CisJY2hhciAgICAgICAqYnVmZmVyID0gTlVMTDsKKwlTaXplICAgICAgICBt c2dsZW47CisJc2htX21xX3Jlc3VsdCByZXM7CisKKworCWlmICghcHJvZHVjZXJfbXFfaGFuZGxl KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBTZXJpYWxpemUgdGhlIHJlY29yZCAqLworCW1zZ2xl biA9IHNlcmlhbGl6ZV93YWxfcmVjb3JkKHJlY29yZCwgJmJ1ZmZlcik7CisKKwlyZXMgPSBzaG1f bXFfc2VuZChwcm9kdWNlcl9tcV9oYW5kbGUsIG1zZ2xlbiwgYnVmZmVyLCBmYWxzZSwgdHJ1ZSk7 CisKKwlpZiAocmVzID09IFNITV9NUV9TVUNDRVNTKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZX YWxQaXBlbGluZVNobS0+bXV0ZXgpOworCQlXYWxQaXBlbGluZVNobS0+cmVjb3Jkc19zZW50Kys7 CisJCVdhbFBpcGVsaW5lU2htLT5ieXRlc19zZW50ICs9IG1zZ2xlbjsKKwkJU3BpbkxvY2tSZWxl YXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCisJCXBmcmVlKGJ1ZmZlcik7CisJCXJldHVy biB0cnVlOworCX0KKworCWlmIChyZXMgPT0gU0hNX01RX0RFVEFDSEVEKQorCXsKKwkJZWxvZyhQ QU5JQywgIlt3YWxwaXBlbGluZV0gcHJvZHVjZXI6IGNvbnN1bWVyIGRldGFjaGVkIik7CisJCXBm cmVlKGJ1ZmZlcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBTb21lIG90aGVyIGVycm9y ICovCisJZWxvZyhQQU5JQywgIlt3YWxwaXBlbGluZV0gcHJvZHVjZXI6IHNobV9tcV9zZW5kIGZh aWxlZCB3aXRoIHJlc3VsdCAlZCIsIHJlcyk7CisJcGZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gZmFs c2U7Cit9CisKKy8qCisgKiBQcm9kdWNlciBGdW5jdGlvbi4KKyAqIFNlbmQgc2h1dGRvd24gbWVz c2FnZSB0byBjb25zdW1lcgorICovCitib29sCitXYWxQaXBlbGluZV9TZW5kU2h1dGRvd24odm9p ZCkKK3sKKwlXYWxSZWNvcmRNc2dIZWFkZXIgaGRyOworCXNobV9tcV9yZXN1bHQgcmVzOworCisJ aWYgKCFwcm9kdWNlcl9tcV9oYW5kbGUpCisJCXJldHVybiBmYWxzZTsKKworCWhkci5tc2dfdHlw ZSA9IFdBTF9NU0dfU0hVVERPV047CisJaGRyLmVuZFJlY1B0ciA9IEludmFsaWRYTG9nUmVjUHRy OworCisJcmVzID0gc2htX21xX3NlbmQocHJvZHVjZXJfbXFfaGFuZGxlLCBzaXplb2YoaGRyKSwg JmhkciwgZmFsc2UsIHRydWUpOworCXJldHVybiAocmVzID09IFNITV9NUV9TVUNDRVNTKTsKK30K KworLyoKKyAqIFByb2R1Y2VyIEZ1bmN0aW9uLgorICogU2VuZCBlcnJvciBtZXNzYWdlIHRvIGNv bnN1bWVyCisgKi8KK2Jvb2wKK1dhbFBpcGVsaW5lX1NlbmRFcnJvcihpbnQgZXJyY29kZSwgY29u c3QgY2hhciAqZXJybXNnKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11 dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+ZXJyb3JfY29kZSA9IGVycmNvZGU7CisJc3RybGNweShX YWxQaXBlbGluZVNobS0+ZXJyb3JfbWVzc2FnZSwgZXJybXNnLAorCQkJc2l6ZW9mKFdhbFBpcGVs aW5lU2htLT5lcnJvcl9tZXNzYWdlKSk7CisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNo bS0+bXV0ZXgpOworCisJcmV0dXJuIHRydWU7Cit9CisKKworLyoKKyAqIFByb2R1Y2VyIEZ1bmN0 aW9uLgorICogUHJvZHVjZXIgbWF5IGNhbiBleGl0IHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGNv bnN1bWVyLCBidXQgaXRzIGJldHRlciB0bworICogd2FpdCB1bnRpbCBjb25zdW1lciByZXF1ZXN0 IHNodXRkb3duLiBUaGlzIHdheSBsb2cgbWVzc2FnZXMgd2lsbCBzaG93CisgKiBubyBvZiByZWNv cmRzX3NlbnQgJiByZWNvcmRzX3JlY2VpdmVkIHJlY29yZHMgZXF1YWwgdG8gZWFjaCBvdGhlci4K KyAqLworc3RhdGljIHZvaWQKK1dhbFBpcGVsaW5lX1dhaXRGb3JDb25zdW1lclNodXRkb3duUmVx dWVzdCh2b2lkKQoreworCWludAkJCWl0ZXJzID0gMDsKKworCXdoaWxlICh0cnVlKQorCXsKKwkJ Ym9vbAkJc2h1dGRvd25fcmVxdWVzdGVkOworCisJCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxp bmVTaG0tPm11dGV4KTsKKwkJc2h1dGRvd25fcmVxdWVzdGVkID0gV2FsUGlwZWxpbmVTaG0tPnNo dXRkb3duX3JlcXVlc3RlZDsKKwkJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0 ZXgpOworCisJCWlmIChzaHV0ZG93bl9yZXF1ZXN0ZWQpCisJCQlicmVhazsKKworCQlpZiAoKytp dGVycyA+PSBNQVhfU0hVVERPV05fV0FJVF9JVEVSUykKKwkJeworCQkJZWxvZyhXQVJOSU5HLAor CQkJCQkiW3dhbHBpcGVsaW5lXSBwcm9kdWNlcjogdGltZWQgb3V0IHdhaXRpbmcgZm9yIGNvbnN1 bWVyICIKKwkJCQkJInRvIGFja25vd2xlZGdlIHNodXRkb3duLCBleGl0aW5nIGFueXdheSIpOwor CQkJYnJlYWs7CisJCX0KKworCQkvKiBBbGxvdyBTSUdURVJNIC8gU0lHSFVQIHRvIGludGVycnVw dCB0aGUgd2FpdCAqLworCQlQcm9jZXNzUGlwZWxpbmVCZ3dJbnRlcnJ1cHRzKCk7CisKKwkJcGdf dXNsZWVwKDEwMDAwKTsgIC8qIHNsZWVwIDEwbXMgKi8KKwl9Cit9CisKKworCisvKgorICogc2Vy aWFsaXplX3dhbF9yZWNvcmQgKFByb2R1Y2VyKQorICoKKyAqIFBhY2sgYSBXYWxSZWNvcmRNc2dI ZWFkZXIgZm9sbG93ZWQgYnkgdGhlIERlY29kZWRYTG9nUmVjb3JkIGludG8gYQorICogY29udGln dW91cyBidWZmZXIsIGNvbnZlcnRpbmcgaW50ZXJpb3IgcG9pbnRlcnMgdG8gcmVsYXRpdmUgb2Zm c2V0cy4KKyAqCisgKiBPdXRwdXQgYnVmZmVyIGxheW91dDoKKyAqICAgW1dhbFJlY29yZE1zZ0hl YWRlcl1bRGVjb2RlZFhMb2dSZWNvcmQgKyB0cmFpbGluZyBkYXRhXQorICovCitzdGF0aWMgU2l6 ZQorc2VyaWFsaXplX3dhbF9yZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBjaGFy ICoqb3V0YnVmKQoreworCURlY29kZWRYTG9nUmVjb3JkICpkZWMgPSB4bG9ncmVhZGVyLT5yZWNv cmQ7CisJRGVjb2RlZFhMb2dSZWNvcmQgKmRlY19jb3B5OworCVdhbFJlY29yZE1zZ0hlYWRlciBo ZHI7CisJU2l6ZSBwYXlsb2FkX3NpemUgPSBkZWMtPnNpemU7CisJU2l6ZSB0b3RhbCA9IHNpemVv ZihXYWxSZWNvcmRNc2dIZWFkZXIpICsgcGF5bG9hZF9zaXplOworCWNoYXIgKmJ1ZiA9IHBhbGxv Yyh0b3RhbCk7CisKKwkvKiBidWlsZCBoZWFkZXIgKi8KKwloZHIubXNnX3R5cGUgICAgICAgICAg PSBXQUxfTVNHX1JFQ09SRDsKKwloZHIucmVhZFJlY1B0ciAgICAgICAgPSB4bG9ncmVhZGVyLT5S ZWFkUmVjUHRyOworCWhkci5lbmRSZWNQdHIgICAgICAgICA9IHhsb2dyZWFkZXItPkVuZFJlY1B0 cjsKKwloZHIubWlzc2luZ0NvbnRyZWNQdHIgPSB4bG9ncmVhZGVyLT5taXNzaW5nQ29udHJlY1B0 cjsKKwloZHIuYWJvcnRlZFJlY1B0ciAgICAgPSB4bG9ncmVhZGVyLT5hYm9ydGVkUmVjUHRyOwor CWhkci5vdmVyd3JpdHRlblJlY1B0ciA9IHhsb2dyZWFkZXItPm92ZXJ3cml0dGVuUmVjUHRyOwor CWhkci5kZWNvZGVkX3NpemUgICAgICA9IHBheWxvYWRfc2l6ZTsKKworCW1lbWNweShidWYsICZo ZHIsIHNpemVvZihoZHIpKTsKKwltZW1jcHkoYnVmICsgc2l6ZW9mKGhkciksIGRlYywgcGF5bG9h ZF9zaXplKTsKKworCS8qCisJICogRml4IHVwIHRoZSBpbnRlcmlvciBwb2ludGVyczogbWFpbl9k YXRhIGFuZCBlYWNoIGJsb2NrJ3MgZGF0YS9ia3BfaW1hZ2UKKwkgKiBhcmUgYWJzb2x1dGUgYWRk cmVzc2VzIGluIHRoZSBwcm9kdWNlci4gQ29udmVydCB0aGVtIHRvIGJ5dGUgb2Zmc2V0cworCSAq IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBjb3BpZWQgRGVjb2RlZFhMb2dSZWNvcmQgc28gdGhlIGNv bnN1bWVyIGNhbgorCSAqIHJlY29uc3RydWN0IHRoZW0uCisJICovCisJZGVjX2NvcHkgPSAoRGVj b2RlZFhMb2dSZWNvcmQgKikoYnVmICsgc2l6ZW9mKGhkcikpOworCisJaWYgKGRlY19jb3B5LT5t YWluX2RhdGFfbGVuID4gMCkKKwkJZGVjX2NvcHktPm1haW5fZGF0YSA9IChjaGFyICopKChjaGFy ICopZGVjLT5tYWluX2RhdGEgLSAoY2hhciAqKWRlYyk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 PSBkZWNfY29weS0+bWF4X2Jsb2NrX2lkOyBpKyspCisJeworCQlEZWNvZGVkQmtwQmxvY2sgKmJs ayA9ICZkZWNfY29weS0+YmxvY2tzW2ldOworCQlpZiAoIWJsay0+aW5fdXNlKQorCQkJY29udGlu dWU7CisJCWlmIChibGstPmhhc19kYXRhKQorCQkJYmxrLT5kYXRhID0gKGNoYXIgKikoKGNoYXIg KilkZWMtPmJsb2Nrc1tpXS5kYXRhIC0gKGNoYXIgKilkZWMpOworCQlpZiAoYmxrLT5oYXNfaW1h Z2UpCisJCQlibGstPmJrcF9pbWFnZSA9IChjaGFyICopKChjaGFyICopZGVjLT5ibG9ja3NbaV0u YmtwX2ltYWdlIC0gKGNoYXIgKilkZWMpOworCX0KKworCSpvdXRidWYgPSBidWY7CisJcmV0dXJu IHRvdGFsOworfQorCisKKy8qCisgKiBDbGVhbiB1cCBwcm9kdWNlci1zaWRlIHJlc291cmNlcwor ICovCitzdGF0aWMgdm9pZAorY2xlYW51cF9wcm9kdWNlcl9yZXNvdXJjZXModm9pZCkKK3sKKwlp ZiAocHJvZHVjZXJfbXFfaGFuZGxlKQorCXsKKwkJc2htX21xX2RldGFjaChwcm9kdWNlcl9tcV9o YW5kbGUpOworCQlwcm9kdWNlcl9tcV9oYW5kbGUgPSBOVUxMOworCX0KKworCWlmIChwcm9kdWNl cl9kc21fc2VnKQorCXsKKwkJZHNtX2RldGFjaChwcm9kdWNlcl9kc21fc2VnKTsKKwkJcHJvZHVj ZXJfZHNtX3NlZyA9IE5VTEw7CisJfQorCisJcHJvZHVjZXJfbXEgPSBOVUxMOworCisJU3Bpbkxv Y2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCVdhbFBpcGVsaW5lU2htLT5wcm9k dWNlcl9waWQgPSAwOworCVdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9leGl0ZWQgPSB0cnVlOwor CVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKK30KKworCisvKgorICog Q2xlYW51cCBjYWxsYmFjayBmb3IgcHJvY2VzcyBleGl0CisgKi8KK3N0YXRpYyB2b2lkCit3YWxf cGlwZWxpbmVfY2xlYW51cF9jYWxsYmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKQoreworCXBpZF90 IG15cGlkID0gTXlQcm9jUGlkOworCWJvb2wgaXNfcHJvZHVjZXIgPSBmYWxzZTsKKworCWlmIChX YWxQaXBlbGluZVNobSkKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11 dGV4KTsKKwkJaXNfcHJvZHVjZXIgPSAoV2FsUGlwZWxpbmVTaG0tPnByb2R1Y2VyX3BpZCA9PSBt eXBpZCk7CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwl9CisK KwlpZiAoaXNfcHJvZHVjZXIpCisJCWNsZWFudXBfcHJvZHVjZXJfcmVzb3VyY2VzKCk7CisJZWxz ZQorCQljbGVhbnVwX2NvbnN1bWVyX3Jlc291cmNlcygpOworfQorCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCXNpZ25hbCBoYW5kbGVyIHJvdXRpbmVzCisgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIFNJR0hVUDogc2V0IGZsYWcg dG8gcmUtcmVhZCBjb25maWcgZmlsZSBhdCBuZXh0IGNvbnZlbmllbnQgdGltZSAqLworc3RhdGlj IHZvaWQKK1BpcGVsaW5lQmd3U2lnSHVwSGFuZGxlcihTSUdOQUxfQVJHUykKK3sKKwlnb3RfU0lH SFVQID0gdHJ1ZTsKKwlXYWtldXBSZWNvdmVyeSgpOworfQorCisvKgorICogUmUtcmVhZCB0aGUg Y29uZmlnIGZpbGUuCisgKgorICogSWYgb25lIG9mIHRoZSBjcml0aWNhbCB3YWxyZWNlaXZlciBv cHRpb25zIGhhcyBjaGFuZ2VkLCBmbGFnIHhsb2dyZWNvdmVyeS5jCisgKiB0byByZXN0YXJ0IGl0 LgorICovCitzdGF0aWMgdm9pZAorUGlwZWxpbmVSZXJlYWRDb25maWcodm9pZCkKK3sKKwljaGFy CSAgICpjb25uaW5mbyA9IHBzdHJkdXAoUHJpbWFyeUNvbm5JbmZvKTsKKwljaGFyCSAgICpzbG90 bmFtZSA9IHBzdHJkdXAoUHJpbWFyeVNsb3ROYW1lKTsKKwlib29sCQl0ZW1wU2xvdCA9IHdhbF9y ZWNlaXZlcl9jcmVhdGVfdGVtcF9zbG90OworCWJvb2wJCWNvbm5pbmZvQ2hhbmdlZDsKKwlib29s CQlzbG90bmFtZUNoYW5nZWQ7CisJYm9vbAkJdGVtcFNsb3RDaGFuZ2VkID0gZmFsc2U7CisKKwlQ cm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKworCWNvbm5pbmZvQ2hhbmdlZCA9IHN0cmNt cChjb25uaW5mbywgUHJpbWFyeUNvbm5JbmZvKSAhPSAwOworCXNsb3RuYW1lQ2hhbmdlZCA9IHN0 cmNtcChzbG90bmFtZSwgUHJpbWFyeVNsb3ROYW1lKSAhPSAwOworCisJLyoKKwkgKiB3YWxfcmVj ZWl2ZXJfY3JlYXRlX3RlbXBfc2xvdCBpcyB1c2VkIG9ubHkgd2hlbiB3ZSBoYXZlIG5vIHNsb3QK KwkgKiBjb25maWd1cmVkLiAgV2UgZG8gbm90IG5lZWQgdG8gdHJhY2sgdGhpcyBjaGFuZ2UgaWYg aXQgaGFzIG5vIGVmZmVjdC4KKwkgKi8KKwlpZiAoIXNsb3RuYW1lQ2hhbmdlZCAmJiBzdHJjbXAo UHJpbWFyeVNsb3ROYW1lLCAiIikgPT0gMCkKKwkJdGVtcFNsb3RDaGFuZ2VkID0gdGVtcFNsb3Qg IT0gd2FsX3JlY2VpdmVyX2NyZWF0ZV90ZW1wX3Nsb3Q7CisJcGZyZWUoY29ubmluZm8pOworCXBm cmVlKHNsb3RuYW1lKTsKKworCWlmIChjb25uaW5mb0NoYW5nZWQgfHwgc2xvdG5hbWVDaGFuZ2Vk IHx8IHRlbXBTbG90Q2hhbmdlZCkKKwkJU3RhcnR1cFJlcXVlc3RXYWxSZWNlaXZlclJlc3RhcnQo KTsKK30KKworLyoKKyAqIFByb2Nlc3MgYW55IHJlcXVlc3RzIG9yIHNpZ25hbHMgcmVjZWl2ZWQg cmVjZW50bHkuCisgKi8KK3ZvaWQKK1Byb2Nlc3NQaXBlbGluZUJnd0ludGVycnVwdHModm9pZCkK K3sKKworCWJvb2wgc2h1dGRvd25fcmVxdWVzdGVkOworCisJaWYgKGdvdF9TSUdIVVApCisJewor CQlnb3RfU0lHSFVQID0gZmFsc2U7CisJCVBpcGVsaW5lUmVyZWFkQ29uZmlnKCk7CisJfQorCisJ U3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCXNodXRkb3duX3JlcXVl c3RlZCA9IFdhbFBpcGVsaW5lU2htLT5zaHV0ZG93bl9yZXF1ZXN0ZWQ7CisJU3BpbkxvY2tSZWxl YXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCisJaWYgKHNodXRkb3duX3JlcXVlc3RlZCkK KwkJcHJvY19leGl0KDApOworCisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKK30KXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVy eS5jCmluZGV4IGMyMzZlMmI3OTY5Li44OGMwYjQzYWM3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJhY2Nl c3MveGFjdC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3hsb2dhcmNoaXZlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dwaXBlbGluZS5oIgog I2luY2x1ZGUgImFjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9n cmVhZGVyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWNvdmVyeS5oIgpAQCAtMTAwLDYgKzEw MSw4IEBAIGludAkJCXJlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9IDA7CiBjaGFyCSAgICpQcmlt YXJ5Q29ubkluZm8gPSBOVUxMOwogY2hhcgkgICAqUHJpbWFyeVNsb3ROYW1lID0gTlVMTDsKIGJv b2wJCXdhbF9yZWNlaXZlcl9jcmVhdGVfdGVtcF9zbG90ID0gZmFsc2U7Citib29sCQl3YWxfcGlw ZWxpbmVfZW5hYmxlZCA9IGZhbHNlOworaW50CQkJd2FsX3BpcGVsaW5lX21xX3NpemVfbWIgPSAx Mjg7CiAKIC8qCiAgKiByZWNvdmVyeVRhcmdldFRpbWVMaW5lR29hbDogd2hhdCB0aGUgdXNlciBy ZXF1ZXN0ZWQsIGlmIGFueQpAQCAtMjA2LDE3ICsyMDksNiBAQCB0eXBlZGVmIHN0cnVjdCBYTG9n UGFnZVJlYWRQcml2YXRlCiAvKiBmbGFnIHRvIHRlbGwgWExvZ1BhZ2VSZWFkIHRoYXQgd2UgaGF2 ZSBzdGFydGVkIHJlcGxheWluZyAqLwogc3RhdGljIGJvb2wgSW5SZWRvID0gZmFsc2U7CiAKLS8q Ci0gKiBDb2RlcyBpbmRpY2F0aW5nIHdoZXJlIHdlIGdvdCBhIFdBTCBmaWxlIGZyb20gZHVyaW5n IHJlY292ZXJ5LCBvciB3aGVyZQotICogdG8gYXR0ZW1wdCB0byBnZXQgb25lLgotICovCi10eXBl ZGVmIGVudW0KLXsKLQlYTE9HX0ZST01fQU5ZID0gMCwJCQkvKiByZXF1ZXN0IHRvIHJlYWQgV0FM IGZyb20gYW55IHNvdXJjZSAqLwotCVhMT0dfRlJPTV9BUkNISVZFLAkJCS8qIHJlc3RvcmVkIHVz aW5nIHJlc3RvcmVfY29tbWFuZCAqLwotCVhMT0dfRlJPTV9QR19XQUwsCQkJLyogZXhpc3Rpbmcg ZmlsZSBpbiBwZ193YWwgKi8KLQlYTE9HX0ZST01fU1RSRUFNLAkJCS8qIHN0cmVhbWVkIGZyb20g cHJpbWFyeSAqLwotfSBYTG9nU291cmNlOwogCiAvKiBodW1hbi1yZWFkYWJsZSBuYW1lcyBmb3Ig WExvZ1NvdXJjZXMsIGZvciBkZWJ1Z2dpbmcgb3V0cHV0ICovCiBzdGF0aWMgY29uc3QgY2hhciAq Y29uc3QgeGxvZ1NvdXJjZU5hbWVzW10gPSB7ImFueSIsICJhcmNoaXZlIiwgInBnX3dhbCIsICJz dHJlYW0ifTsKQEAgLTQ3MzksNiArNDczMSw0OSBAQCBSZWNvdmVyeVJlcXVpcmVzSW50UGFyYW1l dGVyKGNvbnN0IGNoYXIgKnBhcmFtX25hbWUsIGludCBjdXJyVmFsdWUsIGludCBtaW5WYWx1ZQog fQogCiAKKy8qCisgKiBQaXBlbGluZSBiZ3cgc2hvdWxkIGJlIGF3YXJlIG9mIGFsbCB0aGUgcGFy YW1ldGVycyB0aGF0cyBiZWVuIGluaXRpYWxpemVkIGJ5CisgKiB0aGUgc3RhcnR1cCBwcm9jZXNz IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBhY3R1YWwgcmVjb2V2ZXJ5LiBPdGhlciB0aGVuIHRoaXMK KyAqIHRoZXJlIGFyZSBhbHNvIHNvbWUgdmFyaWFibGVzIHRoYXQga2VlcCBvbiBjaGFuZ2luZy4g VGhlIHBpcGVsaW5lICYgdGhlIHN0YXJ0dXAKKyAqIHByb2Nlc3Mgc2hvdWxkIGJlIGF3YXJlIG9m IHRoZSBzdGF0ZSBjaGFuZ2Ugb2Ygc3VjaCB2YXJpYWJsZXMsIHdlIGNhbiB1c2Ugc2hhcmVkCisg KiBtZW1vcnkgZm9yIHN1Y2ggdmFyaWFibGVzLgorICovCit2b2lkCitJbml0aWFsaXplUGlwZWxp bmVSZWNvdmVyeUVudihXYWxQaXBlbGluZVBhcmFtcyAqcGFyYW1zKQoreworCVN0YW5kYnlNb2Rl ID0gcGFyYW1zLT5TdGFuZGJ5TW9kZTsKKwlTdGFuZGJ5TW9kZVJlcXVlc3RlZCA9IHBhcmFtcy0+ U3RhbmRieU1vZGVSZXF1ZXN0ZWQ7CisJQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkID0gcGFyYW1z LT5BcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQ7CisJSW5BcmNoaXZlUmVjb3ZlcnkgPSBwYXJhbXMt PkluQXJjaGl2ZVJlY292ZXJ5OworCXJlY292ZXJ5VGFyZ2V0VExJID0gcGFyYW1zLT5yZWNvdmVy eVRhcmdldFRMSTsKKwltaW5SZWNvdmVyeVBvaW50VExJID0gcGFyYW1zLT5taW5SZWNvdmVyeVBv aW50VExJOworCW1pblJlY292ZXJ5UG9pbnQgPSBwYXJhbXMtPm1pblJlY292ZXJ5UG9pbnQ7CisJ Y3VycmVudFNvdXJjZSA9IHBhcmFtcy0+Y3VycmVudFNvdXJjZTsKKwlsYXN0U291cmNlRmFpbGVk ID0gcGFyYW1zLT5sYXN0U291cmNlRmFpbGVkOworCXBlbmRpbmdXYWxSY3ZSZXN0YXJ0ID0gcGFy YW1zLT5wZW5kaW5nV2FsUmN2UmVzdGFydDsKKwlSZWRvU3RhcnRUTEkgPSBwYXJhbXMtPlJlZG9T dGFydFRMSTsKKwlSZWRvU3RhcnRMU04gPSBwYXJhbXMtPlJlZG9TdGFydExTTjsKKwlzdGFuZGJ5 U3RhdGUgPSBwYXJhbXMtPnN0YW5kYnlTdGF0ZTsKKwlDaGVja1BvaW50TG9jID0gcGFyYW1zLT5D aGVja1BvaW50TG9jOworCUNoZWNrUG9pbnRUTEkgPSBwYXJhbXMtPkNoZWNrUG9pbnRUTEk7CisJ Zmx1c2hlZFVwdG8gPSBwYXJhbXMtPmZsdXNoZWRVcHRvOworCXJlY2VpdmVUTEkgPSBwYXJhbXMt PnJlY2VpdmVUTEk7CisJYWJvcnRlZFJlY1B0ciA9IHBhcmFtcy0+YWJvcnRlZFJlY1B0cjsKKwlt aXNzaW5nQ29udHJlY1B0ciA9IHBhcmFtcy0+bWlzc2luZ0NvbnRyZWNQdHI7CisJSW5SZWRvID0g cGFyYW1zLT5JblJlZG87CisJYmFja3VwRW5kUmVxdWlyZWQgPSBwYXJhbXMtPmJhY2t1cEVuZFJl cXVpcmVkOworCWJhY2t1cFN0YXJ0UG9pbnQgPSBwYXJhbXMtPmJhY2t1cFN0YXJ0UG9pbnQ7CisJ YmFja3VwRW5kUG9pbnQgPSBwYXJhbXMtPmJhY2t1cEVuZFBvaW50OworCWN1ckZpbGVUTEkgPSBw YXJhbXMtPmN1ckZpbGVUTEk7CisJSW5SZWNvdmVyeSA9IHRydWU7CisKKwkvKgorCSAqIEFzIHBp cGVsaW5lIHdpbGwgYmUgcmVhZGluZyB0aGUgd2FsLCBzbyBiZXR0ZXIgdG8gb3duIHRoZSBsYXRj aCB0byB3YWl0IGF0LgorCSAqLworCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJCU93 bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOworfQorCiAvKgog ICogR1VDIGNoZWNrX2hvb2sgZm9yIHByaW1hcnlfc2xvdF9uYW1lCiAgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYmd3b3JrZXIuYwppbmRleCAzOTE0ZDIyYTUxNC4uYjExOGJmMTE1MDUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dw aXBlbGluZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3JlcGFjay5oIgogI2luY2x1ZGUgImxpYnBx L3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC0xNjYsNiArMTY3LDEwIEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QKIAl7CiAJCS5mbl9uYW1lID0gIkRhdGFDaGVja3N1bXNXb3Jr ZXJNYWluIiwKIAkJLmZuX2FkZHIgPSBEYXRhQ2hlY2tzdW1zV29ya2VyTWFpbgorCX0sCisJewor CQkuZm5fbmFtZSA9ICJXYWxQaXBlbGluZV9Qcm9kdWNlck1haW4iLAorCQkuZm5fYWRkciA9IFdh bFBpcGVsaW5lX1Byb2R1Y2VyTWFpbgogCX0KIH07CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQKaW5kZXggZmNiNmFiODA1ODMuLmIxYWU5NDIxNWYzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMzQ2Miw2ICszNDYyLDIx IEBACiAgIGJvb3RfdmFsID0+ICdmYWxzZScsCiB9LAogCit7IG5hbWUgPT4gJ3dhbF9waXBlbGlu ZScsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfUE9TVE1BU1RFUicsIGdyb3VwID0+ ICdXQUxfUkVDT1ZFUlknLAorICBzaG9ydF9kZXNjID0+ICdVc2UgcGFyYWxsZWwgd29ya2VycyB0 byBzcGVlZHVwIHJlY292ZXJ5LicsCisgIHZhcmlhYmxlID0+ICd3YWxfcGlwZWxpbmVfZW5hYmxl ZCcsCisgIGJvb3RfdmFsID0+ICdmYWxzZScsCit9LAorCit7IG5hbWUgPT4gJ3dhbF9waXBlbGlu ZV9xdWV1ZV9zaXplJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1BPU1RNQVNURVIn LCBncm91cCA9PiAnV0FMX1JFQ09WRVJZJywKKyAgc2hvcnRfZGVzYyA9PiAnU2l6ZSBvZiB0aGUg c2hhcmVkIG1lbW9yeSBxdWV1ZSB1c2VkIGJ5IHRoZSBXQUwgcGlwZWxpbmUuJywKKyAgZmxhZ3Mg PT4gJ0dVQ19VTklUX01CJywKKyAgdmFyaWFibGUgPT4gJ3dhbF9waXBlbGluZV9tcV9zaXplX21i JywKKyAgYm9vdF92YWwgPT4gJzEyOCcsCisgIG1pbiA9PiAnMScsCisgIG1heCA9PiAnMTAyNCcs Cit9LAorCiB7IG5hbWUgPT4gJ3dhbF9yZWNlaXZlcl9jcmVhdGVfdGVtcF9zbG90JywgdHlwZSA9 PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnUkVQTElDQVRJT05f U1RBTkRCWScsCiAgIHNob3J0X2Rlc2MgPT4gJ1NldHMgd2hldGhlciBhIFdBTCByZWNlaXZlciBz aG91bGQgY3JlYXRlIGEgdGVtcG9yYXJ5IHJlcGxpY2F0aW9uIHNsb3QgaWYgbm8gcGVybWFuZW50 IHNsb3QgaXMgY29uZmlndXJlZC4nLAogICB2YXJpYWJsZSA9PiAnd2FsX3JlY2VpdmVyX2NyZWF0 ZV90ZW1wX3Nsb3QnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlCmluZGV4IGUzZTQ2MmYzZWZiLi4yYjEzMGNmYmQ2YiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMjgwLDYgKzI4MCw4IEBACiAj cmVjb3ZlcnlfcHJlZmV0Y2ggPSB0cnkgICAgICAgICMgcHJlZmV0Y2ggcGFnZXMgcmVmZXJlbmNl ZCBpbiB0aGUgV0FMPwogI3dhbF9kZWNvZGVfYnVmZmVyX3NpemUgPSA1MTJrQiAjIGxvb2thaGVh ZCB3aW5kb3cgdXNlZCBmb3IgcHJlZmV0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisjd2FsX3BpcGVsaW5lID0gb2ZmICAg ICAgICAgICAgICAjIGRlY29kZSBpbiBwYXJhbGxlbAorI3dhbF9waXBlbGluZV9xdWV1ZV9zaXpl ID0gMTI4TUIKIAogIyAtIEFyY2hpdmluZyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy94bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IDQzN2I0ZjMyMzQ5 Li45NDY1ZTUyY2YyYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCkBAIC00MCw2ICs0MCw4IEBAIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgbWluX3dhbF9zaXplX21iOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhf d2FsX3NpemVfbWI7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IHdhbF9rZWVwX3NpemVfbWI7CiBl eHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9zbG90X3dhbF9rZWVwX3NpemVfbWI7CitleHRlcm4g UEdETExJTVBPUlQgaW50IHdhbF9waXBlbGluZV9tcV9zaXplX21iOworZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgd2FsX3BpcGVsaW5lX2VuYWJsZWQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IFhM T0didWZmZXJzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBYTG9nQXJjaGl2ZVRpbWVvdXQ7CiBl eHRlcm4gUEdETExJTVBPUlQgaW50IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUuaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy94bG9ncGlwZWxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYjRjZGUyNzNlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxv Z3BpcGVsaW5lLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHhsb2dwaXBlbGluZS5oCisgKiAgICBXQUwgcmVwbGF5IHBpcGVsaW5lIGZvciBwYXJhbGxlbCBy ZWNvdmVyeQorICoKKyAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBwcm9kdWNlci1jb25zdW1l ciBwaXBlbGluZSBmb3IgV0FMIHJlcGxheToKKyAqIC0gUHJvZHVjZXI6IGJhY2tncm91bmQgd29y a2VyIHRoYXQgcmVhZHMgYW5kIGRlY29kZXMgV0FMIHJlY29yZHMKKyAqIC0gQ29uc3VtZXI6IHN0 YXJ0dXAgcHJvY2VzczogY29yZSByZWRvIGxvb3AKKyAqCisgKiBUaGUgcGlwZWxpbmUgdXNlcyBz aGFyZWQgbWVtb3J5IHF1ZXVlcyAoc2htX21xKSB0byBwYXNzIGRlY29kZWQgV0FMCisgKiByZWNv cmRzIGZyb20gcHJvZHVjZXIgdG8gY29uc3VtZXIsIGVuYWJsaW5nIHBhcmFsbGVsaXNtIHdoaWxl CisgKiBtYWludGFpbmluZyBzZXF1ZW50aWFsIHJlcGxheSBzZW1hbnRpY3MuCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dwaXBlbGluZS5oCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgV0FMX1BJUEVMSU5FX0gKKyNkZWZpbmUg V0FMX1BJUEVMSU5FX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3hsb2dyZWNvdmVyeS5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIK KyNpbmNsdWRlICJzdG9yYWdlL2RzbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX21xLmgiCisj aW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCisKKy8qCisgKiBNYWdpYyBudW1iZXIgZm9yIHNoYXJl ZCBtZW1vcnkgVE9DCisgKi8KKyNkZWZpbmUgUEdfV0FMX1BJUEVMSU5FX01BR0lDIDB4NTc0MTRD NTAgIC8qICJXQUxQIiAqLworCisvKgorICogTWVzc2FnZSB0eXBlcyBzZW50IHRocm91Z2ggdGhl IHBpcGVsaW5lCisgKi8KK3R5cGVkZWYgZW51bSBXYWxNc2dUeXBlCit7CisJV0FMX01TR19JTlZB TElEID0gMCwKKwlXQUxfTVNHX1JFQ09SRCwgICAgICAgICAvKiBEZWNvZGVkIFdBTCByZWNvcmQg Ki8KKwlXQUxfTVNHX1NIVVRET1dOLCAgICAgICAvKiBHcmFjZWZ1bCBzaHV0ZG93biByZXF1ZXN0 ICovCisJV0FMX01TR19FUlJPUiAgICAgICAgICAgLyogRXJyb3Igb2NjdXJyZWQgaW4gcHJvZHVj ZXIgKi8KK30gV2FsTXNnVHlwZTsKKworLyogV2lyZSBoZWFkZXIgZm9yIGEgc2VyaWFsaXplZCBX QUwgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgV2FsUmVjb3JkTXNnSGVhZGVyCit7CisJV2Fs TXNnVHlwZSAgbXNnX3R5cGU7ICAgICAgICAgICAgIC8qIFdBTF9NU0dfUkVDT1JEIGV0YyAqLwor CXVpbnQzMiAgICAgIGRlY29kZWRfc2l6ZTsgICAgICAgICAvKiBieXRlIGxlbmd0aCBvZiB0aGUg cGF5bG9hZCB0aGF0IGZvbGxvd3MgKi8KKwlYTG9nUmVjUHRyICByZWFkUmVjUHRyOyAgICAgICAg ICAgLyogWExvZ1JlYWRlclN0YXRlLT5SZWFkUmVjUHRyICovCisJWExvZ1JlY1B0ciAgZW5kUmVj UHRyOyAgICAgICAgICAgIC8qIFhMb2dSZWFkZXJTdGF0ZS0+RW5kUmVjUHRyICovCisJWExvZ1Jl Y1B0ciAgbWlzc2luZ0NvbnRyZWNQdHI7ICAgIC8qIFhMb2dSZWFkZXJTdGF0ZS0+bWlzc2luZ0Nv bnRyZWNQdHIgKi8KKwlYTG9nUmVjUHRyICBhYm9ydGVkUmVjUHRyOyAgICAgICAgLyogWExvZ1Jl YWRlclN0YXRlLT5hYm9ydGVkUmVjUHRyICovCisJWExvZ1JlY1B0ciAgb3ZlcndyaXR0ZW5SZWNQ dHI7ICAgIC8qIFhMb2dSZWFkZXJTdGF0ZS0+b3ZlcndyaXR0ZW5SZWNQdHIgKi8KK30gV2FsUmVj b3JkTXNnSGVhZGVyOworCisvKgorICogUGFyYW1ldGVycyBwYXNzZWQgZnJvbSBTdGFydHVwWExP RyAoY29uc3VtZXIgc2lkZSkKKyAqIHRvIHRoZSBXQUwgcGlwZWxpbmUgcHJvZHVjZXIgYmFja2dy b3VuZCB3b3JrZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IFdhbFBpcGVsaW5lUGFyYW1zCit7CisJ Ym9vbAkJU3RhbmRieU1vZGU7CisJYm9vbAkJU3RhbmRieU1vZGVSZXF1ZXN0ZWQ7CisJYm9vbAkJ QXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkOworCWJvb2wJCUluQXJjaGl2ZVJlY292ZXJ5OworCWJv b2wJCUluUmVkbzsKKwlib29sIAkJbGFzdFNvdXJjZUZhaWxlZDsKKwlib29sIAkJcGVuZGluZ1dh bFJjdlJlc3RhcnQ7CisJYm9vbCAJCWJhY2t1cEVuZFJlcXVpcmVkOworCisJVGltZUxpbmVJRCAg UmVkb1N0YXJ0VExJOworCVRpbWVMaW5lSUQgIENoZWNrUG9pbnRUTEk7CisJVGltZUxpbmVJRCAg cmVjb3ZlcnlUYXJnZXRUTEk7CisJVGltZUxpbmVJRAltaW5SZWNvdmVyeVBvaW50VExJOworCVRp bWVMaW5lSUQgIFJlcGxheVRMSTsKKwlUaW1lTGluZUlECXJlY2VpdmVUTEk7CisKKwlYTG9nUmVj UHRyIAliYWNrdXBTdGFydFBvaW50OworCVhMb2dSZWNQdHIgCWJhY2t1cEVuZFBvaW50OworCVhM b2dSZWNQdHIgIENoZWNrUG9pbnRMb2M7CisJWExvZ1JlY1B0ciAgUmVkb1N0YXJ0TFNOOworCVhM b2dSZWNQdHIgIE5leHRSZWNQdHI7CisJWExvZ1JlY1B0cgltaW5SZWNvdmVyeVBvaW50OworCVhM b2dSZWNQdHIgCWZsdXNoZWRVcHRvOworCVhMb2dSZWNQdHIgCWFib3J0ZWRSZWNQdHI7CisJWExv Z1JlY1B0ciAJbWlzc2luZ0NvbnRyZWNQdHI7CisKKwlpbnQJcmVhZEZpbGU7CisJWExvZ1NlZ05v IHJlYWRTZWdObzsKKwl1aW50MzIgcmVhZE9mZjsKKwl1aW50MzIgcmVhZExlbjsKKwlYTG9nU291 cmNlIHJlYWRTb3VyY2U7CisJVGltZUxpbmVJRCBjdXJGaWxlVExJOworCisKKwlIb3RTdGFuZGJ5 U3RhdGUgc3RhbmRieVN0YXRlOworCVhMb2dTb3VyY2UgCWN1cnJlbnRTb3VyY2U7CisKK30gV2Fs UGlwZWxpbmVQYXJhbXM7CisKKy8qCisgKiBTaGFyZWQgbWVtb3J5IGNvbnRyb2wgc3RydWN0dXJl IGZvciB0aGUgV0FMIHBpcGVsaW5lCisgKi8KK3R5cGVkZWYgc3RydWN0IFdhbFBpcGVsaW5lU2ht Q3RsCit7CisJLyogTGlmZWN5Y2xlIG1hbmFnZW1lbnQgKi8KKwlzbG9ja190ICAgICAgICAgbXV0 ZXg7CisJYm9vbCAgICAgICAgICAgIGluaXRpYWxpemVkOworCWJvb2wgICAgICAgICAgICBzaHV0 ZG93bl9yZXF1ZXN0ZWQ7CisJYm9vbCAgICAgICAgICAgIHByb2R1Y2VyX2V4aXRlZDsKKworCS8q IFByb2R1Y2VyIHN0YXRlICovCisJcGlkX3QgICAgICAgICAgIHByb2R1Y2VyX3BpZDsKKwlQcm9j TnVtYmVyICAgICAgcHJvZHVjZXJfcHJvY251bTsKKwlYTG9nUmVjUHRyICAgICAgcHJvZHVjZXJf bHNuOyAgIC8qIExhc3QgTFNOIHJlYWQgYnkgcHJvZHVjZXIgKi8KKworCS8qIENvbnN1bWVyIHN0 YXRlICovCisJcGlkX3QgICAgICAgICAgIGNvbnN1bWVyX3BpZDsKKwlYTG9nUmVjUHRyICAgICAg Y29uc3VtZXJfbHNuOyAgIC8qIExhc3QgTFNOIHJlY2lldmVkIGJ5IGNvbnN1bWVyICovCisJWExv Z1JlY1B0ciAgICAgIGFwcGxpZWRfbHNuOyAgIAkvKiBMYXN0IExTTiBhcHBsaWVkIGJ5IGNvbnN1 bWVyICovCisKKwkvKiBRdWV1ZSBoYW5kbGVzICovCisJZHNtX2hhbmRsZSAgICAgIGRzbV9zZWdf aGFuZGxlOworCXNobV9tcV9oYW5kbGUgICAqcHJvZHVjZXJfbXFfaGFuZGxlOworCXNobV9tcV9o YW5kbGUgICAqY29uc3VtZXJfbXFfaGFuZGxlOworCisJLyogU3RhdGlzdGljcyAqLworCXVpbnQ2 NCAgICAgICAgICByZWNvcmRzX3NlbnQ7CisJdWludDY0ICAgICAgICAgIHJlY29yZHNfcmVjZWl2 ZWQ7CisJdWludDY0ICAgICAgICAgIGJ5dGVzX3NlbnQ7CisJdWludDY0ICAgICAgICAgIGJ5dGVz X3JlY2VpdmVkOworCisJLyogRXJyb3Igc3RhdGUgKi8KKwlpbnQgICAgICAgICAgICAgZXJyb3Jf Y29kZTsKKwljaGFyICAgICAgICAgICAgZXJyb3JfbWVzc2FnZVsyNTZdOworfSBXYWxQaXBlbGlu ZVNobUN0bDsKKworLyogY29uc3VtZXIgbWF5IGhhdmUgdG8gY29tcHV0ZSBwcmVmZXRlY2hlciBz dGF0cyAqLworZXh0ZXJuIFBHRExMSU1QT1JUIFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hl cl9waXBlbGluZWQ7CisKKy8qCisgKiBQdWJsaWMgQVBJIGZ1bmN0aW9ucworICovCisKKy8qIFBy b2R1Y2VyIGZ1bmN0aW9ucyAoY2FsbGVkIGJ5IGJhY2tncm91bmQgd29ya2VyKSAqLworZXh0ZXJu IHZvaWQgV2FsUGlwZWxpbmVfUHJvZHVjZXJNYWluKERhdHVtIG1haW5fYXJnKTsKK2V4dGVybiBi b29sIFdhbFBpcGVsaW5lX1NlbmRSZWNvcmQoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOworZXh0 ZXJuIGJvb2wgV2FsUGlwZWxpbmVfU2VuZFNodXRkb3duKHZvaWQpOworZXh0ZXJuIGJvb2wgV2Fs UGlwZWxpbmVfU2VuZEVycm9yKGludCBlcnJjb2RlLCBjb25zdCBjaGFyICplcnJtc2cpOworCitl eHRlcm4gdm9pZCBQcm9jZXNzUGlwZWxpbmVCZ3dJbnRlcnJ1cHRzKHZvaWQpOworCisvKiBHbG9i YWwgc2hhcmVkIG1lbW9yeSBwb2ludGVyICovCitleHRlcm4gV2FsUGlwZWxpbmVTaG1DdGwgKldh bFBpcGVsaW5lU2htOworCisjZW5kaWYgICAvKiBXQUxfUElQRUxJTkVfSCAqLwpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVj b3ZlcnkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaAppbmRleCBiYTc3NTBk Y2EwYi4uOGI5NDNiOGYzOTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVj b3ZlcnkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgKQEAgLTExLDYg KzExLDcgQEAKICNpZm5kZWYgWExPR1JFQ09WRVJZX0gKICNkZWZpbmUgWExPR1JFQ09WRVJZX0gK IAorI2luY2x1ZGUgImFjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94 bG9ncmVhZGVyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAi bGliL3N0cmluZ2luZm8uaCIKQEAgLTYwLDYgKzYxLDE3IEBAIHR5cGVkZWYgZW51bSBSZWNvdmVy eVBhdXNlU3RhdGUKIAlSRUNPVkVSWV9QQVVTRUQsCQkJLyogcmVjb3ZlcnkgaXMgcGF1c2VkICov CiB9IFJlY292ZXJ5UGF1c2VTdGF0ZTsKIAorLyogQ29kZXMgaW5kaWNhdGluZyB3aGVyZSB3ZSBn b3QgYSBXQUwgZmlsZSBmcm9tIGR1cmluZyByZWNvdmVyeSwgb3Igd2hlcmUKKyAqIHRvIGF0dGVt cHQgdG8gZ2V0IG9uZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJWExPR19GUk9NX0FOWSA9IDAs CQkJLyogcmVxdWVzdCB0byByZWFkIFdBTCBmcm9tIGFueSBzb3VyY2UgKi8KKwlYTE9HX0ZST01f QVJDSElWRSwJCQkvKiByZXN0b3JlZCB1c2luZyByZXN0b3JlX2NvbW1hbmQgKi8KKwlYTE9HX0ZS T01fUEdfV0FMLAkJCS8qIGV4aXN0aW5nIGZpbGUgaW4gcGdfd2FsICovCisJWExPR19GUk9NX1NU UkVBTSwJCQkvKiBzdHJlYW1lZCBmcm9tIHByaW1hcnkgKi8KK30gWExvZ1NvdXJjZTsKKwogLyoK ICAqIFNoYXJlZC1tZW1vcnkgc3RhdGUgZm9yIFdBTCByZWNvdmVyeS4KICAqLwpAQCAtMjA1LDYg KzIxNyw4IEBAIHR5cGVkZWYgc3RydWN0CiAJYm9vbAkJcmVjb3Zlcnlfc2lnbmFsX2ZpbGVfZm91 bmQ7CiB9IEVuZE9mV2FsUmVjb3ZlcnlJbmZvOwogCitzdHJ1Y3QgV2FsUGlwZWxpbmVQYXJhbXM7 ICAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLworCiBleHRlcm4gRW5kT2ZXYWxSZWNvdmVyeUlu Zm8gKkZpbmlzaFdhbFJlY292ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgU2h1dGRvd25XYWxSZWNv dmVyeSh2b2lkKTsKIGV4dGVybiB2b2lkIFJlbW92ZVByb21vdGVTaWduYWxGaWxlcyh2b2lkKTsK QEAgLTIxNyw2ICsyMzEsMTAgQEAgZXh0ZXJuIHZvaWQgR2V0WExvZ1JlY2VpcHRUaW1lKFRpbWVz dGFtcFR6ICpydGltZSwgYm9vbCAqZnJvbVN0cmVhbSk7CiBleHRlcm4gVGltZXN0YW1wVHogR2V0 TGF0ZXN0WFRpbWUodm9pZCk7CiBleHRlcm4gVGltZXN0YW1wVHogR2V0Q3VycmVudENodW5rUmVw bGF5U3RhcnRUaW1lKHZvaWQpOwogZXh0ZXJuIFhMb2dSZWNQdHIgR2V0Q3VycmVudFJlcGxheVJl Y1B0cihUaW1lTGluZUlEICpyZXBsYXlFbmRUTEkpOworZXh0ZXJuIFhMb2dSZWNvcmQgKlJlYWRS ZWNvcmQoWExvZ1ByZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyLCBpbnQgZW1vZGUsCisJCSAgIGJv b2wgZmV0Y2hpbmdfY2twdCwgVGltZUxpbmVJRCByZXBsYXlUTEkpOworZXh0ZXJuIGludCBYTG9n UGFnZVJlYWQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBYTG9nUmVjUHRyIHRhcmdldFBh Z2VQdHIsIGludCByZXFMZW4sCisJCQkgWExvZ1JlY1B0ciB0YXJnZXRSZWNQdHIsIGNoYXIgKnJl YWRCdWYpOwogCiBleHRlcm4gYm9vbCBQcm9tb3RlSXNUcmlnZ2VyZWQodm9pZCk7CiBleHRlcm4g Ym9vbCBDaGVja1Byb21vdGVTaWduYWwodm9pZCk7CkBAIC0yMjYsNiArMjQ0LDcgQEAgZXh0ZXJu IHZvaWQgU3RhcnR1cFJlcXVlc3RXYWxSZWNlaXZlclJlc3RhcnQodm9pZCk7CiBleHRlcm4gdm9p ZCBYTG9nUmVxdWVzdFdhbFJlY2VpdmVyUmVwbHkodm9pZCk7CiAKIGV4dGVybiB2b2lkIFJlY292 ZXJ5UmVxdWlyZXNJbnRQYXJhbWV0ZXIoY29uc3QgY2hhciAqcGFyYW1fbmFtZSwgaW50IGN1cnJW YWx1ZSwgaW50IG1pblZhbHVlKTsKK2V4dGVybiB2b2lkIEluaXRpYWxpemVQaXBlbGluZVJlY292 ZXJ5RW52KHN0cnVjdCBXYWxQaXBlbGluZVBhcmFtcyAqcGFyYW1zKTsKIAogZXh0ZXJuIHZvaWQg eGxvZ19vdXRkZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgKaW5kZXggOWFkNjE5MDgwYmUuLmU5ZmY2ZGU5 YTFhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaApAQCAtNDIsNiArNDIsNyBAQCBQ R19TSE1FTV9TVUJTWVNURU0oTXVsdGlYYWN0U2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJT WVNURU0oQnVmZmVyTWFuYWdlclNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFN0 cmF0ZWd5Q3RsU2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oQnVmVGFibGVTaG1l bUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShXYWxQaXBlbGluZVNobWVtQ2FsbGJhY2tz KQogCiAvKiBsb2NrIG1hbmFnZXIgKi8KIFBHX1NITUVNX1NVQlNZU1RFTShMb2NrTWFuYWdlclNo bWVtQ2FsbGJhY2tzKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAppbmRleCAzNmQ3ODk3MjBhMy4uZmMyM2Fj YmFlYzIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkCisrKyBiL3Ny Yy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkCkBAIC02MSw2ICs2MSw3IEBAIHRlc3RzICs9IHsK ICAgICAgICd0LzA1MF9yZWRvX3NlZ21lbnRfbWlzc2luZy5wbCcsCiAgICAgICAndC8wNTFfZWZm ZWN0aXZlX3dhbF9sZXZlbC5wbCcsCiAgICAgICAndC8wNTJfY2hlY2twb2ludF9zZWdtZW50X21p c3NpbmcucGwnLAorICAgICAgJ3QvMDUzX3dhbHBpcGVsaW5lLnBsJywKICAgICBdLAogICB9LAog fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTNfd2FscGlwZWxpbmUucGwgYi9z cmMvdGVzdC9yZWNvdmVyeS90LzA1M193YWxwaXBlbGluZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMmZiNzkwYWFkYzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9yZWNvdmVyeS90LzA1M193YWxwaXBlbGluZS5wbApAQCAtMCwwICsxLDIwOCBAQAorIyBD b3B5cmlnaHQgKGMpIDIwMjUtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyMKKyMgVGVzdHMgZm9yIHRoZSBXQUwgcGlwZWxpbmUgZmVhdHVyZSAod2FsX3BpcGVsaW5l IEdVQykuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3Jl OworCisjIC0tLS0tLS0tLS0KKyMgSGVscGVycworIyAtLS0tLS0tLS0tCisKK3N1YiBzbHVycF9s b2cKK3sKKwlteSAoJG5vZGUpID0gQF87CisJb3BlbihteSAkZmgsICc8JywgJG5vZGUtPmxvZ2Zp bGUoKSkgb3IgZGllICJDYW5ub3Qgb3BlbiBsb2c6ICQhIjsKKwlteSBAbGluZXMgPSA8JGZoPjsK KwljbG9zZSgkZmgpOworCXJldHVybiBAbGluZXM7Cit9CisKK3N1YiBsb2dfbWF0Y2hlcworewor CW15ICgkbm9kZSwgJHJlKSA9IEBfOworCXJldHVybiBncmVwIHsgLyRyZS8gfSBzbHVycF9sb2co JG5vZGUpOworfQorCisKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIyAgIHdhbF9waXBlbGluZSA9IG9uLCBiYXNpYyByZWNvdmVyeQorIyAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK215ICRub2RlMSA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygncDEtcmVjb3ZlcnknKTsKKyRub2RlMS0+aW5pdDsKKyRub2RlMS0+ c3RhcnQ7CisKKyRub2RlMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisgICAgQ1JFQVRFIFRB QkxFIHQgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSwgdiB0ZXh0KTsKKyAgICBJTlNFUlQgSU5UTyB0 ICh2KQorICAgIFNFTEVDVCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1MDAw MCkgaTsKK30pOworCisjIGdlbmVyYXRlIG1vcmUgV0FMCiskbm9kZTEtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxeworICAgIElOU0VSVCBJTlRPIHQgKHYpCisgICAgU0VMRUNUIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDUwMDAwKSBpOworfSk7CisKKyMgY3Jhc2ggc3RvcCB0 byBmb3JjZSBXQUwgcmVjb3ZlcnkKKyRub2RlMS0+c3RvcCgnaW1tZWRpYXRlJyk7CisKKyMgcmVz dGFydCDihpIgcmVjb3ZlcnkgaGFwcGVucworJG5vZGUxLT5hcHBlbmRfY29uZigncG9zdGdyZXNx bC5jb25mJywgIndhbF9waXBlbGluZSA9IG9uIik7Ciskbm9kZTEtPnN0YXJ0OworCisKKyMgUHJv ZHVjZXIgc3RhcnRlZAorb2soc2NhbGFyIGxvZ19tYXRjaGVzKCRub2RlMSwgcXIvXFt3YWxwaXBl bGluZVxdIHByb2R1Y2VyOiBzdGFydGVkIGF0LyksCisJJ3Byb2R1Y2VyIHN0YXJ0ZWQgbWVzc2Fn ZSBmb3VuZCBpbiBsb2cnKTsKKworIyBQaXBlbGluZSBzdG9wcGVkIGNsZWFubHkKK29rKHNjYWxh ciBsb2dfbWF0Y2hlcygkbm9kZTEsIHFyL1xbd2FscGlwZWxpbmVcXSBzdG9wcGVkLyksCisJJ3Bp cGVsaW5lIHN0b3BwZWQgbWVzc2FnZSBmb3VuZCBpbiBsb2cnKTsKKworIyBDb25zdW1lciByZWNl aXZlZCBzaHV0ZG93biBmcm9tIHByb2R1Y2VyCitvayhzY2FsYXIgbG9nX21hdGNoZXMoJG5vZGUx LCBxci9cW3dhbHBpcGVsaW5lXF0gY29uc3VtZXI6IHJlY2VpdmVkIHNodXRkb3duIG1lc3NhZ2Uv KSwKKwknY29uc3VtZXIgcmVjZWl2ZWQgc2h1dGRvd24gbWVzc2FnZSBmcm9tIHByb2R1Y2VyJyk7 CisKKyMgc2VudCA9PSByZWNlaXZlZAorbXkgQGV4aXRfbGluZXMgPSBsb2dfbWF0Y2hlcygkbm9k ZTEsCisJcXIvXFt3YWxwaXBlbGluZVxdIHByb2R1Y2VyOiBleGl0aW5nOiBzZW50PVxkKyByZWNl aXZlZD1cZCsvKTsKK29rKHNjYWxhciBAZXhpdF9saW5lcyA+PSAxLCAncHJvZHVjZXIgZXhpdGlu ZyBsaW5lIGZvdW5kIGluIGxvZycpOworCitteSAoJHNlbnQsICRyZWN2KSA9ICRleGl0X2xpbmVz Wy0xXSA9fiAvc2VudD0oXGQrKSByZWNlaXZlZD0oXGQrKS87CitvayhkZWZpbmVkICRzZW50ICYm ICRzZW50ID4gMCwgInNlbnQgY291bnQgKCRzZW50KSBpcyBwb3NpdGl2ZSIpOworb2soZGVmaW5l ZCAkcmVjdiAmJiAkcmVjdiA+IDAsICJyZWNlaXZlZCBjb3VudCAoJHJlY3YpIGlzIHBvc2l0aXZl Iik7Citpcygkc2VudCwgJHJlY3YsICJubyByZWNvcmRzIGxvc3QgaW4gcGlwZWxpbmUgcXVldWU6 IHNlbnQ9JHNlbnQgcmVjZWl2ZWQ9JHJlY3YiKTsKKworIyBObyBQQU5JQworb2soIShzY2FsYXIg bG9nX21hdGNoZXMoJG5vZGUxLCBxci9cYlBBTklDXGIvKSksCisJJ25vIFBBTklDIG1lc3NhZ2Vz IGR1cmluZyBwaXBlbGluZSByZWNvdmVyeScpOworCisjIERhdGEgaW50ZWdyaXR5CitteSAkY291 bnQgPSAkbm9kZTEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIGNvdW50KCopIEZST00g dCcpOworaXMoJGNvdW50ICsgMCwgMTAwXzAwMCwgJ2FsbCAxMDAwMDAgcm93cyB2aXNpYmxlIGFm dGVyIHBpcGVsaW5lIHJlY292ZXJ5Jyk7CisKKyRub2RlMS0+c3RvcDsKKworIyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAg ICB3YWxfcGlwZWxpbmUgPSBvZmYgKGJhc2VsaW5lLCBubyBwaXBlbGluZSBsb2cgbWVzc2FnZXMp CisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisKK215ICRub2RlMiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn cDAtcmVjb3ZlcnknKTsKKyRub2RlMi0+aW5pdDsKKyRub2RlMi0+c3RhcnQ7CisKKyRub2RlMi0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisgICAgQ1JFQVRFIFRBQkxFIHQgKGlkIHNlcmlhbCBQ UklNQVJZIEtFWSwgdiB0ZXh0KTsKKyAgICBJTlNFUlQgSU5UTyB0ICh2KQorICAgIFNFTEVDVCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1MDAwMCkgaTsKK30pOworCisjIGdl bmVyYXRlIG1vcmUgV0FMCiskbm9kZTItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworICAgIElO U0VSVCBJTlRPIHQgKHYpCisgICAgU0VMRUNUIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDUwMDAwKSBpOworfSk7CisKKyMgY3Jhc2ggc3RvcCB0byBmb3JjZSBXQUwgcmVjb3Zl cnkKKyRub2RlMi0+c3RvcCgnaW1tZWRpYXRlJyk7CisKKyMgcmVzdGFydCDihpIgcmVjb3Zlcnkg aGFwcGVucworJG5vZGUyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgIndhbF9waXBl bGluZSA9IG9mZiIpOworJG5vZGUyLT5zdGFydDsKKworb2soIShzY2FsYXIgbG9nX21hdGNoZXMo JG5vZGUyLCBxci9cW3dhbHBpcGVsaW5lXF0gcHJvZHVjZXI6IHN0YXJ0ZWQvKSksCisJJ25vIHBp cGVsaW5lIGxvZyBtZXNzYWdlcyB3aGVuIHdhbF9waXBlbGluZSA9IG9mZicpOworCitteSAkY291 bnQyID0gJG5vZGUyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBjb3VudCgqKSBGUk9N IHQnKTsKK2lzKCRjb3VudDIgKyAwLCAxMDBfMDAwLCAnYWxsIHJvd3MgcHJlc2VudCBhZnRlciBu b24tcGlwZWxpbmUgcmVjb3ZlcnknKTsKKworJG5vZGUyLT5zdG9wOworCisKKworIyAjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjICAgIHBpcGVsaW5lIG9uIHZzIG9mZiBwcm9kdWNlIGlkZW50aWNhbCBkYXRhIChjaGVj a3N1bSBjb21wYXJpc29uKQorIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK215ICRwcmltYXJ5ID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7CiskcHJpbWFyeS0+aW5pdChhbGxvd3Nf c3RyZWFtaW5nID0+IDEpOworJHByaW1hcnktPnN0YXJ0OworCiskcHJpbWFyeS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHF7CisgICAgQ1JFQVRFIFRBQkxFIHQgKGlkIHNlcmlhbCBQUklNQVJZIEtF WSwgdiB0ZXh0KTsKKyAgICBJTlNFUlQgSU5UTyB0ICh2KQorICAgIFNFTEVDVCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwMDApIGk7Cit9KTsKKworJHByaW1hcnktPmJh Y2t1cCgnYmFja3VwMycpOworCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7Cisg ICAgSU5TRVJUIElOVE8gdCAodikKKyAgICBTRUxFQ1QgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDMwMDAwKSBpOworICAgIFVQREFURSB0IFNFVCB2ID0gJ3gnIFdIRVJFIGlk ICUgMTAgPSAwOworfSk7CisKKyMgZW5zdXJlIFdBTCBib3VuZGFyeQorJHByaW1hcnktPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHBnX3N3aXRjaF93YWwoKScpOworbXkgJHRhcmdldF9s c24gPSAkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfY3VycmVudF93 YWxfbHNuKCknKTsKKworbXkgJHJlcGxpY2Ffb24gPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3JlcGxpY2FfcDEnKTsKKyRyZXBsaWNhX29uLT5pbml0X2Zyb21fYmFja3VwKCRwcmlt YXJ5LCAnYmFja3VwMycsCisgICAgaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRyZXBsaWNhX29uLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgIndhbF9waXBlbGluZSA9IG9uXG4iKTsKKyRy ZXBsaWNhX29uLT5zdGFydDsKKworbXkgJHJlcGxpY2Ffb2ZmID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdyZXBsaWNhX3AwJyk7CiskcmVwbGljYV9vZmYtPmluaXRfZnJvbV9iYWNr dXAoJHByaW1hcnksICdiYWNrdXAzJywKKyAgICBoYXNfc3RyZWFtaW5nID0+IDEpOworJHJlcGxp Y2Ffb2ZmLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgIndhbF9waXBlbGluZSA9IG9m ZlxuIik7CiskcmVwbGljYV9vZmYtPnN0YXJ0OworCisjIHdhaXQgZm9yIHJlcGxpY2FzIHRvIGNh dGNoIHVwCiskcHJpbWFyeS0+d2FpdF9mb3JfY2F0Y2h1cCgkcmVwbGljYV9vbik7CiskcHJpbWFy eS0+d2FpdF9mb3JfY2F0Y2h1cCgkcmVwbGljYV9vZmYpOworCitteSAkbWQ1X29uICA9ICRyZXBs aWNhX29uLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAiU0VMRUNUIG1kNShzdHJpbmdfYWdn KGlkOjp0ZXh0fHx2LCAnLCcgT1JERVIgQlkgaWQpKSBGUk9NIHQiKTsKKworbXkgJG1kNV9vZmYg PSAkcmVwbGljYV9vZmYtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgICJTRUxFQ1QgbWQ1KHN0 cmluZ19hZ2coaWQ6OnRleHR8fHYsICcsJyBPUkRFUiBCWSBpZCkpIEZST00gdCIpOworCitpcygk bWQ1X29uLCAkbWQ1X29mZiwKKyAgICAndGFibGUgY2hlY2tzdW0gaWRlbnRpY2FsIGJldHdlZW4g cGlwZWxpbmU9b24gYW5kIHBpcGVsaW5lPW9mZicpOworCiskcmVwbGljYV9vbi0+c3RvcDsKKyRy ZXBsaWNhX29mZi0+c3RvcDsKKyRwcmltYXJ5LT5zdG9wKCdmYXN0Jyk7CisKKworCisjICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgICBwaXBlbGluZSB3aGVuIG9uIHRpbnkg cmVwbGF5CisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitteSAkbm9kZTMg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3AxLXNtYWxsLXJlcGxheScpOworJG5v ZGUzLT5pbml0OworJG5vZGUzLT5zdGFydDsKKworIyBjcmFzaCBzdG9wIHRvIGZvcmNlIFdBTCBy ZWNvdmVyeQorJG5vZGUzLT5zdG9wKCdpbW1lZGlhdGUnKTsKKworIyByZXN0YXJ0IOKGkiByZWNv dmVyeSBoYXBwZW5zCiskbm9kZTMtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAid2Fs X3BpcGVsaW5lID0gb24iKTsKKyRub2RlMy0+c3RhcnQ7CisKK29rKHNjYWxhciBsb2dfbWF0Y2hl cygkbm9kZTMsIHFyL1xbd2FscGlwZWxpbmVcXSBwcm9kdWNlcjogZXhpdGluZzogc2VudD0wIHJl Y2VpdmVkPTAvKSwKKwkncGlwZWxpbmUgcHJvZHVjZXIgc2VudCB6ZXJvIHJlY29yZHMnKTsKKwor b2soKHNjYWxhciBsb2dfbWF0Y2hlcygkbm9kZTMsIHFyL3JlZG8gZG9uZSBhdC8pKSwKKwkncGlw ZWxpbmUgcmVkbyBkb25lIGV2ZW4gd2l0aCB0aW55IHJlcGxheScpOworCiskbm9kZTMtPnN0b3A7 CisKK2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0gCjIuNDku MAoK --00000000000013c8b6064ef100c4 Content-Type: application/pdf; name="recoveries-becnhmark-v03-pdf.pdf" Content-Disposition: attachment; filename="recoveries-becnhmark-v03-pdf.pdf" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpy2x4d2 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 YpkmJN8hBeHcEB12m6afFM/vbm7ubovf/uGVmSxMyQV5WUr8Hn0LRJ1c3qxbuPT/WeDC/L751a// cyA8LbiplrbdCSMwRQhLkV7A7kWcCQEzy6bvs0MZvjaqYteW3EKDtNTgjTF9i4iH81fDcA7hbnY4 U3Qxu+5xKkaGc5itIxH9pCjLTwCMXhZ/GDKvw+1bLPKlki5vWw1uivrBXZIUbLgtXhz+enV5oBSz SluXxE0IWawLeCcpLfIT9znrQtiLrCs86a8tYVV+xrro+A8Px6vDzd37v6tXmB2RFNkWYPQd3hYf 2cInyKixpPfq6plRMTdbQvzd9XgcoyLhd1hArUAC1792Bf2Oqcz7QwjUtYE/xSbRDrkXsh+CasdS K651hQKgY2ae7haHVGrvXlbeUYq/NPOX9buy+JSyz+Ld1bvDNXnOt1f3F99eH4Z5vrFcN3kY9FYN zjQJDBhpEurhPNV0k9W4SaDmuxblWMj0zPj//fd//19ZISFBbpHQdRAM9qlxUKCEk6sh2d0Oi+gQ aL8tq5wFHSz74K40cj+E6q6ludcwlYffRG5IGiE/jUbYjGu4YnU6ycGozs4xg/nd/weGymplCmVu ZHN0cmVhbQplbmRvYmoKMSAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50IDIgMCBSIC9SZXNv dXJjZXMgNCAwIFIgL0NvbnRlbnRzIDMgMCBSIC9NZWRpYUJveCBbMCAwIDExNjYuNjY3IDE2NTAu OThdCj4+CmVuZG9iago0IDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNw YWNlIDw8IC9DczEgNSAwIFIgL0NzMiA5IDAgUiA+PiAvRm9udCA8PAovVFQxIDYgMCBSIC9UVDMg OCAwIFIgL1RUMiA3IDAgUiAvVFQ0IDM0IDAgUiA+PiAvWE9iamVjdCA8PCAvRm0xIDEwIDAgUiAv Rm0yCjEyIDAgUiAvRm0zIDE0IDAgUiAvRm00IDE2IDAgUiAvRm01IDE4IDAgUiAvRm02IDIwIDAg UiAvRm03IDIyIDAgUiAvRm04IDI0IDAgUgovRm05IDI2IDAgUiAvRm0xMCAyOCAwIFIgL0ZtMTEg MzAgMCBSIC9GbTEyIDMyIDAgUiA+PiA+PgplbmRvYmoKMTAgMCBvYmoKPDwgL0ZpbHRlciAvRmxh dGVEZWNvZGUgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0Zvcm1UeXBlIDEgL0JCb3gg WzAgMCA1MCAxNzRdCi9SZXNvdXJjZXMgMTEgMCBSIC9Hcm91cCA8PCAvUyAvVHJhbnNwYXJlbmN5 IC9DUyAzNiAwIFIgL0kgdHJ1ZSAvSyBmYWxzZSA+PgovTGVuZ3RoIDc2ID4+CnN0cmVhbQp4AStU CFQoVDAAQlMDBUNzE4WiVIVwhTwFfediQ4XkYgUDPWNzCxMTM0sgy8LEwsjUzBjIMjI0MjAztlQo TkbSygXUmqYQCADz9BH6CmVuZHN0cmVhbQplbmRvYmoKMTEgMCBvYmoKPDwgL1Byb2NTZXQgWyAv UERGIF0gL0NvbG9yU3BhY2UgPDwgL0NzMSA1IDAgUiA+PiA+PgplbmRvYmoKMTIgMCBvYmoKPDwg L0ZpbHRlciAvRmxhdGVEZWNvZGUgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0Zvcm1U eXBlIDEgL0JCb3ggWzAgMCA1MSAxMjNdCi9SZXNvdXJjZXMgMTMgMCBSIC9Hcm91cCA8PCAvUyAv VHJhbnNwYXJlbmN5IC9DUyAzNiAwIFIgL0kgdHJ1ZSAvSyBmYWxzZSA+PgovTGVuZ3RoIDc2ID4+ CnN0cmVhbQp4AStUCFQoVDAAQlNDBUMjY4WiVIVwhTwFfediQ4XkYgUDPWNzCxMTM0sgy8LEwsjU zBjIMjI0MjAztlQoTkbSygXUmqYQCADyexHwCmVuZHN0cmVhbQplbmRvYmoKMTMgMCBvYmoKPDwg L1Byb2NTZXQgWyAvUERGIF0gL0NvbG9yU3BhY2UgPDwgL0NzMSA1IDAgUiA+PiA+PgplbmRvYmoK MTQgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUg L0Zvcm0gL0Zvcm1UeXBlIDEgL0JCb3ggWzAgMCA1MCAzMV0KL1Jlc291cmNlcyAxNSAwIFIgL0dy b3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kgL0NTIDM2IDAgUiAvSSB0cnVlIC9LIGZhbHNlID4+Ci9M ZW5ndGggNzUgPj4Kc3RyZWFtCngBK1QIVChUMABCUwMFY0OFolSFcIU8BX3nYkOF5GIFAz1jcwsT EzNLIMvCxMLI1MwYyDIyNDIwM7ZUKE5G6OQC6kxTCAQA0LkRigplbmRzdHJlYW0KZW5kb2JqCjE1 IDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BERiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4g Pj4KZW5kb2JqCjE2IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0 IC9TdWJ0eXBlIC9Gb3JtIC9Gb3JtVHlwZSAxIC9CQm94IFswIDAgNTAgMzFdCi9SZXNvdXJjZXMg MTcgMCBSIC9Hcm91cCA8PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAzNiAwIFIgL0kgdHJ1ZSAvSyBm YWxzZSA+PgovTGVuZ3RoIDc1ID4+CnN0cmVhbQp4AStUCFQoVDAAQlMDBWNDhaJUhXCFPAV952JD heRiBQM9Y3MLExMzSyDLwsTCyNTMGMgyMjQyMDO2VChORujkAupMUwgEANC5EYoKZW5kc3RyZWFt CmVuZG9iagoxNyAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAvQ3Mx IDUgMCBSID4+ID4+CmVuZG9iagoxOCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvVHlw ZSAvWE9iamVjdCAvU3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDUwIDMwXQov UmVzb3VyY2VzIDE5IDAgUiAvR3JvdXAgPDwgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgMzYgMCBSIC9J IHRydWUgL0sgZmFsc2UgPj4KL0xlbmd0aCA3NSA+PgpzdHJlYW0KeAErVAhUKFQwAEJTAwVjA4Wi VIVwhTwFfediQ4XkYgUDPWNzCxMTM0sgy8LEwsjUzBjIMjI0MjAztlQoTkbo5ALqTFMIBADQbxGI CmVuZHN0cmVhbQplbmRvYmoKMTkgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIF0gL0NvbG9yU3Bh Y2UgPDwgL0NzMSA1IDAgUiA+PiA+PgplbmRvYmoKMjAgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVE ZWNvZGUgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0Zvcm1UeXBlIDEgL0JCb3ggWzAg MCA1MCAzMl0KL1Jlc291cmNlcyAyMSAwIFIgL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kgL0NT IDM2IDAgUiAvSSB0cnVlIC9LIGZhbHNlID4+Ci9MZW5ndGggNzUgPj4Kc3RyZWFtCngBK1QIVChU MABCUwMFYyOFolSFcIU8BX3nYkOF5GIFAz1jcwsTEzNLIMvCxMLI1MwYyDIyNDIwM7ZUKE5G6OQC 6kxTCAQA0QMRjAplbmRzdHJlYW0KZW5kb2JqCjIxIDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BERiBd IC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2JqCjIyIDAgb2JqCjw8IC9GaWx0 ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9Gb3JtVHlwZSAx IC9CQm94IFswIDAgNTAgMjQ2XQovUmVzb3VyY2VzIDIzIDAgUiAvR3JvdXAgPDwgL1MgL1RyYW5z cGFyZW5jeSAvQ1MgMzYgMCBSIC9JIHRydWUgL0sgZmFsc2UgPj4KL0xlbmd0aCA3MCA+PgpzdHJl YW0KeAErVAhUKFQwAEJTAwUjEzOFolSFcIU8BX3nYkOF5GIFAz0DAwMzY0szQ3MzIMfM2NjMwNhI wVChOBlVF1eaQiAAnEIQ5gplbmRzdHJlYW0KZW5kb2JqCjIzIDAgb2JqCjw8IC9Qcm9jU2V0IFsg L1BERiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2JqCjI0IDAgb2JqCjw8 IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9Gb3Jt VHlwZSAxIC9CQm94IFswIDAgNTAgMTcwXQovUmVzb3VyY2VzIDI1IDAgUiAvR3JvdXAgPDwgL1Mg L1RyYW5zcGFyZW5jeSAvQ1MgMzYgMCBSIC9JIHRydWUgL0sgZmFsc2UgPj4KL0xlbmd0aCA3MCA+ PgpzdHJlYW0KeAErVAhUKFQwAEJTAwVDcwOFolSFcIU8BX3nYkOF5GIFAz0DAwMzY0szQ3MzIMfM 2NjMwNhIwVChOBlVF1eaQiAAmywQ3gplbmRzdHJlYW0KZW5kb2JqCjI1IDAgb2JqCjw8IC9Qcm9j U2V0IFsgL1BERiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2JqCjI2IDAg b2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3Jt IC9Gb3JtVHlwZSAxIC9CQm94IFswIDAgNTAgMzddCi9SZXNvdXJjZXMgMjcgMCBSIC9Hcm91cCA8 PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAzNiAwIFIgL0kgdHJ1ZSAvSyBmYWxzZSA+PgovTGVuZ3Ro IDY4ID4+CnN0cmVhbQp4AStUCFQoVDAAQlMDBWNzhaJUhXCFPAV952JDheRiBQM9AwMDM2NLM0Nz MyDHzNjYzMDYSMFQoTgZVVMaVyAAfP8QggplbmRzdHJlYW0KZW5kb2JqCjI3IDAgb2JqCjw8IC9Q cm9jU2V0IFsgL1BERiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2JqCjI4 IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9G b3JtIC9Gb3JtVHlwZSAxIC9CQm94IFswIDAgNTAgMzddCi9SZXNvdXJjZXMgMjkgMCBSIC9Hcm91 cCA8PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAzNiAwIFIgL0kgdHJ1ZSAvSyBmYWxzZSA+PgovTGVu Z3RoIDY4ID4+CnN0cmVhbQp4AStUCFQoVDAAQlMDBWNzhaJUhXCFPAV952JDheRiBQM9AwMDM2NL M0NzMyDHzNjYzMDYSMFQoTgZVVMaVyAAfP8QggplbmRzdHJlYW0KZW5kb2JqCjI5IDAgb2JqCjw8 IC9Qcm9jU2V0IFsgL1BERiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2Jq CjMwIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBl IC9Gb3JtIC9Gb3JtVHlwZSAxIC9CQm94IFswIDAgNTEgNThdCi9SZXNvdXJjZXMgMzEgMCBSIC9H cm91cCA8PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAzNiAwIFIgL0kgdHJ1ZSAvSyBmYWxzZSA+Pgov TGVuZ3RoIDY4ID4+CnN0cmVhbQp4AStUCFQoVDAAQlNDBVMLhaJUhXCFPAV952JDheRiBQM9AwMD M2NLM0NzMyDHzNjYzMDYSMFQoTgZVVMaVyAAfh0QigplbmRzdHJlYW0KZW5kb2JqCjMxIDAgb2Jq Cjw8IC9Qcm9jU2V0IFsgL1BERiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5k b2JqCjMyIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0 eXBlIC9Gb3JtIC9Gb3JtVHlwZSAxIC9CQm94IFswIDAgNTAgNTldCi9SZXNvdXJjZXMgMzMgMCBS IC9Hcm91cCA8PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAzNiAwIFIgL0kgdHJ1ZSAvSyBmYWxzZSA+ PgovTGVuZ3RoIDY3ID4+CnN0cmVhbQp4AStUCFQoVDAAQlMgslQoSlUIV8hT0HcuNlRILlYw0DMw MDAztjQzNDcDcsyMjc0MjI0UDBWKk1E1pXEFAgB+FxCKCmVuZHN0cmVhbQplbmRvYmoKMzMgMCBv YmoKPDwgL1Byb2NTZXQgWyAvUERGIF0gL0NvbG9yU3BhY2UgPDwgL0NzMSA1IDAgUiA+PiA+Pgpl bmRvYmoKMzcgMCBvYmoKPDwgL04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0xlbmd0aCAyNjEy IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AZ2Wd1RT2RaHz703vdASIiAl9Bp6CSDS O0gVBFGJSYBQAoaEJnZEBUYUESlWZFTAAUeHImNFFAuDgmLXCfIQUMbBUURF5d2MawnvrTXz3pr9 x1nf2ee319ln733XugBQ/IIEwnRYAYA0oVgU7uvBXBITy8T3AhgQAQ5YAcDhZmYER/hEAtT8vT2Z mahIxrP27i6AZLvbLL9QJnPW/3+RIjdDJAYACkXVNjx+JhflApRTs8UZMv8EyvSVKTKGMTIWoQmi rCLjxK9s9qfmK7vJmJcm5KEaWc4ZvDSejLtQ3pol4aOMBKFcmCXgZ6N8B2W9VEmaAOX3KNPT+JxM ADAUmV/M5yahbIkyRRQZ7onyAgAIlMQ5vHIOi/k5aJ4AeKZn5IoEiUliphHXmGnl6Mhm+vGzU/li MSuUw03hiHhMz/S0DI4wF4Cvb5ZFASVZbZloke2tHO3tWdbmaPm/2d8eflP9Pch6+1XxJuzPnkGM nlnfbOysL70WAPYkWpsds76VVQC0bQZA5eGsT+8gAPIFALTenPMehmxeksTiDCcLi+zsbHMBn2su K+g3+5+Cb8q/hjn3mcvu+1Y7phc/gSNJFTNlReWmp6ZLRMzMDA6Xz2T99xD/48A5ac3Jwyycn8AX 8YXoVVHolAmEiWi7hTyBWJAuZAqEf9Xhfxg2JwcZfp1rFGh1XwB9hTlQuEkHyG89AEMjAyRuP3oC fetbEDEKyL68aK2Rr3OPMnr+5/ofC1yKbuFMQSJT5vYMj2RyJaIsGaPfhGzBAhKQB3SgCjSBLjAC LGANHIAzcAPeIACEgEgQA5YDLkgCaUAEskE+2AAKQTHYAXaDanAA1IF60AROgjZwBlwEV8ANcAsM gEdACobBSzAB3oFpCILwEBWiQaqQFqQPmULWEBtaCHlDQVA4FAPFQ4mQEJJA+dAmqBgqg6qhQ1A9 9CN0GroIXYP6oAfQIDQG/QF9hBGYAtNhDdgAtoDZsDscCEfCy+BEeBWcBxfA2+FKuBY+DrfCF+Eb 8AAshV/CkwhAyAgD0UZYCBvxREKQWCQBESFrkSKkAqlFmpAOpBu5jUiRceQDBoehYZgYFsYZ44dZ jOFiVmHWYkow1ZhjmFZMF+Y2ZhAzgfmCpWLVsaZYJ6w/dgk2EZuNLcRWYI9gW7CXsQPYYew7HA7H wBniHHB+uBhcMm41rgS3D9eMu4Drww3hJvF4vCreFO+CD8Fz8GJ8Ib4Kfxx/Ht+PH8a/J5AJWgRr gg8hliAkbCRUEBoI5wj9hBHCNFGBqE90IoYQecRcYimxjthBvEkcJk6TFEmGJBdSJCmZtIFUSWoi XSY9Jr0hk8k6ZEdyGFlAXk+uJJ8gXyUPkj9QlCgmFE9KHEVC2U45SrlAeUB5Q6VSDahu1FiqmLqd Wk+9RH1KfS9HkzOX85fjya2Tq5FrleuXeyVPlNeXd5dfLp8nXyF/Sv6m/LgCUcFAwVOBo7BWoUbh tMI9hUlFmqKVYohimmKJYoPiNcVRJbySgZK3Ek+pQOmw0iWlIRpC06V50ri0TbQ62mXaMB1HN6T7 05PpxfQf6L30CWUlZVvlKOUc5Rrls8pSBsIwYPgzUhmljJOMu4yP8zTmuc/jz9s2r2le/7wplfkq bip8lSKVZpUBlY+qTFVv1RTVnaptqk/UMGomamFq2Wr71S6rjc+nz3eez51fNP/k/IfqsLqJerj6 avXD6j3qkxqaGr4aGRpVGpc0xjUZmm6ayZrlmuc0x7RoWgu1BFrlWue1XjCVme7MVGYls4s5oa2u 7act0T6k3as9rWOos1hno06zzhNdki5bN0G3XLdTd0JPSy9YL1+vUe+hPlGfrZ+kv0e/W3/KwNAg 2mCLQZvBqKGKob9hnmGj4WMjqpGr0SqjWqM7xjhjtnGK8T7jWyawiZ1JkkmNyU1T2NTeVGC6z7TP DGvmaCY0qzW7x6Kw3FlZrEbWoDnDPMh8o3mb+SsLPYtYi50W3RZfLO0sUy3rLB9ZKVkFWG206rD6 w9rEmmtdY33HhmrjY7POpt3mta2pLd92v+19O5pdsN0Wu067z/YO9iL7JvsxBz2HeIe9DvfYdHYo u4R91RHr6OG4zvGM4wcneyex00mn351ZzinODc6jCwwX8BfULRhy0XHhuBxykS5kLoxfeHCh1FXb leNa6/rMTdeN53bEbcTd2D3Z/bj7Kw9LD5FHi8eUp5PnGs8LXoiXr1eRV6+3kvdi72rvpz46Pok+ jT4Tvna+q30v+GH9Av12+t3z1/Dn+tf7TwQ4BKwJ6AqkBEYEVgc+CzIJEgV1BMPBAcG7gh8v0l8k XNQWAkL8Q3aFPAk1DF0V+nMYLiw0rCbsebhVeH54dwQtYkVEQ8S7SI/I0shHi40WSxZ3RslHxUXV R01Fe0WXRUuXWCxZs+RGjFqMIKY9Fh8bFXskdnKp99LdS4fj7OIK4+4uM1yWs+zacrXlqcvPrpBf wVlxKh4bHx3fEP+JE8Kp5Uyu9F+5d+UE15O7h/uS58Yr543xXfhl/JEEl4SyhNFEl8RdiWNJrkkV SeMCT0G14HWyX/KB5KmUkJSjKTOp0anNaYS0+LTTQiVhirArXTM9J70vwzSjMEO6ymnV7lUTokDR kUwoc1lmu5iO/kz1SIwkmyWDWQuzarLeZ0dln8pRzBHm9OSa5G7LHcnzyft+NWY1d3Vnvnb+hvzB Ne5rDq2F1q5c27lOd13BuuH1vuuPbSBtSNnwy0bLjWUb326K3tRRoFGwvmBos+/mxkK5QlHhvS3O Ww5sxWwVbO3dZrOtatuXIl7R9WLL4oriTyXckuvfWX1X+d3M9oTtvaX2pft34HYId9zd6brzWJli WV7Z0K7gXa3lzPKi8re7V+y+VmFbcWAPaY9kj7QyqLK9Sq9qR9Wn6qTqgRqPmua96nu37Z3ax9vX v99tf9MBjQPFBz4eFBy8f8j3UGutQW3FYdzhrMPP66Lqur9nf19/RO1I8ZHPR4VHpcfCj3XVO9TX N6g3lDbCjZLGseNxx2/94PVDexOr6VAzo7n4BDghOfHix/gf754MPNl5in2q6Sf9n/a20FqKWqHW 3NaJtqQ2aXtMe9/pgNOdHc4dLT+b/3z0jPaZmrPKZ0vPkc4VnJs5n3d+8kLGhfGLiReHOld0Prq0 5NKdrrCu3suBl69e8blyqdu9+/xVl6tnrjldO32dfb3thv2N1h67npZf7H5p6bXvbb3pcLP9luOt jr4Ffef6Xfsv3va6feWO/50bA4sG+u4uvnv/Xtw96X3e/dEHqQ9eP8x6OP1o/WPs46InCk8qnqo/ rf3V+Ndmqb307KDXYM+ziGePhrhDL/+V+a9PwwXPqc8rRrRG6ketR8+M+YzderH0xfDLjJfT44W/ Kf6295XRq59+d/u9Z2LJxPBr0euZP0reqL45+tb2bedk6OTTd2nvpqeK3qu+P/aB/aH7Y/THkens T/hPlZ+NP3d8CfzyeCZtZubf94Tz+wplbmRzdHJlYW0KZW5kb2JqCjUgMCBvYmoKWyAvSUNDQmFz ZWQgMzcgMCBSIF0KZW5kb2JqCjM4IDAgb2JqCjw8IC9OIDEgL0FsdGVybmF0ZSAvRGV2aWNlR3Jh eSAvTGVuZ3RoIDMzODUgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBpVcHXFNX2z83 92awwp4ywkaWAWXLiMwAsofgIiaBhBFiIAiIi1KsYN3iwFHRoqhFqxWBOlGLVurGrS/UUkGpxVpc WH2fm4DC2/7e7/t+X+7vcP/nOeNZ//PcA0LaW3hSaS4FIZQnKZSFJ3DSpqWls+j3EQMZIk3kijR5 /AIpJy4uGqYgSb5ESL7H/l7eRBgpue5C7jV27H/sUQXCAj7MOgWtRFDAz0MIm4wQw4QvlRUipDIN 5NbzCqUkLgOsl5OUEAx4FcxRH14LYmQRLpQIZWI+K1zGK2GF8/LyeCx3V3dWnCw/U5z7D1aTi/4/ v7xcOWk3+bOApl6QkxgFb1ewv0LACyGxL+BDfF5oImBvwP1F4pQYwEEIUWykhVMSAEcCFshzkjmA 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 c6NL444DBgeqD6KD8oNPvs349uahqENth70PN35n+92WI7pHqpqwppKmgaOio13Nac1XWyJb2lr9 Wo987/r97mOWx2qP6x9feUL1RMWJDydLTw6ekp7qP511+lHb7LZ7Z6aduXE2/uylc1Hnzv8Q9sOZ dk77yfP+549d8L3Q8qP3j0cvel5s6vDoOPKTx09HLnlearrsdbn5is+V1quTr564Fnjt9PWQ6z/c 4N642BnTefVm8s3bt2bc6rotuN17J/fO87tFd4fuLYaLfdUDrQc1D00f1v1r/L8OdHl2He8O6e74 OfHne4/4j57+UvDLu56KXzV+rXls8bih1733WF9Y35Un05/0PJU+Heqv/E37ty3PHJ5993vQ7x0D 0wZ6nsuef/hj+QvjF7v/nPRn22Dc4MOXeS+HXlW9Nn695433m/a3qW8fD817R3+38a/xf7W+j3p/ /0Pehw//BgkP+GIKZW5kc3RyZWFtCmVuZG9iago5IDAgb2JqClsgL0lDQ0Jhc2VkIDM4IDAgUiBd CmVuZG9iagozOSAwIG9iago8PCAvTiAzIC9BbHRlcm5hdGUgL0RldmljZVJHQiAvTGVuZ3RoIDEw NzIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBhVVbaBxVGP43c3ZXyDoPYpuaSjp4 ayhJ2aSiCbXRvSSbbeN22Vy0QZDN7NmdaSY748xseqH4UARBBKOCT4L3t0KfhHipti+2iNJCiRIM ouBD641CpS8S1u/M7M7uhmBn2TPf/P9/vv/833/ODFH0StGyjC6FaKnq2oVMUnn+2LwSXacueoC6 qZe6i6pjJfL5KcIlYsW987rzA4WE5frg9v7O6C1P3SXuqEShe2A3S466BHySKPyaatkuUZTBPnLC tQR+Cvh+GwsEzgtc8XFJ4AUfYy5iZgopxLwOLKtaEf7ou8ADC232Shv214AIzM3wKrd1VRFa5G2z rBvcc/jDXdxtkf8Hl4waavauPRhjzuL0Edz7UfsrpWJa4EeAz6nF8ekGvrasz+Ua+B/LTRaAHyPq 2lVbnE0A7wMeK9sTs8Dg6dK02mQTr5zWZp6D/T7YVxfNI2LuTuBvqwu5o8CC5xfVSUFXeohIimg8 K/rdB9xvmwURg/VIEyWeHgceAD6uu9kZYOSS3nGWp4Xd4zmtpcQ6kUv66njxsOhTL/A1bmREXsH/ u+XmG3lZrGrkRC7wsGHuePWCh8VcbWYSduRl8y4a6s9lL5f1iWwj/n3NnhR2MfeKZXh7FGtjt+xa QdSOXOEHeXVWaAjO8FjRHs80cInmQkXiZNICRpWqtEkKFShDSdwtsuEpk04GLBxeDgvHUzNmsCMm 7/n9+GaEQhVv5g3M1JEh1fcJ1TBfoz/BpwVMCqXwVIOtQtvz+Cu42eAxWQ+LswP4H2RT7BAbYaOk sKfZM2yMpWEdZQcD7nxbHWI9N5HF53kJGbkXN4eKL6Eyl4oYf0WESU7A0KHFSm+t39forP2irl59 49blM1/uasWusdUXrscun2nTTAfXYhDRqdrRu2kf/i18I7yGcT28EXAo4Z/CG/itQ61Wl7aqLvol VE+gJsPrxBLq1VEdb6tusIOjnc9s5Wv0sclolqsrvb4KQgH+au5Ojs4OtOLjP8b/iq/FP4h/HP9D elv6VLogfSZ9Ln1HinRRuiR9LX0jnZe+COK377m/d4Kee3UIm6hC7Mdmve2KYn/KSXm3/LCclvfI j8pTQZQi98hD8qS8F57dQXdau1np0EGnY9Csqdb2ucTJ0AMmaB26F33WWxk7zscsVqzTCXDaUF/s syqdQmz7OWtUxPrYEMtu2dUjYq8H3P55aPajqURnDTwyHklHEqRE9kVGI0ORwwI3z3dkL3yjGPHW cvlJfFuIUqZ1ytYrmqsMx+NPKgl86riSrar7B5SiYSiey1Fs7nB7mZf2k/hOinlEtwve9y+082rL 5j5LdOhv8d5r2eZrROccop7HW7Z+vBt3vEe0+oRas5d9PgqFvidyygeGvedQLIl318/1+m28w6Jv EW2+Wa//+2G9vvkR+DeILhr/Af8leAsKZW5kc3RyZWFtCmVuZG9iagozNiAwIG9iagpbIC9JQ0NC YXNlZCAzOSAwIFIgXQplbmRvYmoKMiAwIG9iago8PCAvVHlwZSAvUGFnZXMgL01lZGlhQm94IFsw IDAgMTE2Ni42NjcgMTY1MC45OF0gL0NvdW50IDEgL0tpZHMgWyAxIDAgUiBdCj4+CmVuZG9iago0 MCAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgL1ZlcnNpb24gLzEuNCA+Pgpl bmRvYmoKMzUgMCBvYmoKWyAxIDAgUiAgL1hZWiAwIDE2NTAuOTggMCBdCmVuZG9iago2IDAgb2Jq Cjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0FBQUFBQitIZWx2 ZXRpY2FOZXVlIC9Gb250RGVzY3JpcHRvcgo0MSAwIFIgL0VuY29kaW5nIC9NYWNSb21hbkVuY29k aW5nIC9GaXJzdENoYXIgMzIgL0xhc3RDaGFyIDIyMiAvV2lkdGhzIFsgMjc4CjAgMCAwIDAgMTAw MCAwIDAgMjU5IDI1OSAwIDYwMCAyNzggMzg5IDI3OCAzMzMgNTU2IDU1NiA1NTYgNTU2IDU1NiA1 NTYgNTU2CjU1NiA1NTYgNTU2IDI3OCAyNzggNjAwIDYwMCA2MDAgMCA4MDAgNjQ4IDY4NSA3MjIg NzA0IDYxMSA1NzQgNzU5IDcyMiAyNTkKMCA2NjcgNTU2IDg3MSA3MjIgNzYwIDY0OCAwIDY4NSA2 NDggNTc0IDcyMiA2MTEgOTI2IDYxMSA2NDggNjExIDAgMzMzIDAgMAo1MDAgMCA1MzcgNTkzIDUz NyA1OTMgNTM3IDI5NiA1NzQgNTU2IDIyMiAyMjIgNTE5IDIyMiA4NTMgNTU2IDU3NCA1OTMgNTkz CjMzMyA1MDAgMzE1IDU1NiA1MDAgNzU4IDUxOCA1MDAgNDgwIDAgMCAwIDYwMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAw IDAgMCAwIDAgNTE4IF0gPj4KZW5kb2JqCjQxIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRv ciAvRm9udE5hbWUgL0FBQUFBQitIZWx2ZXRpY2FOZXVlIC9GbGFncyAzMiAvRm9udEJCb3gKWy05 NTEgLTQ4MSAxOTg3IDEwNzddIC9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgOTUyIC9EZXNjZW50IC0y MTMgL0NhcEhlaWdodAo3MTQgL1N0ZW1WIDk1IC9MZWFkaW5nIDI4IC9YSGVpZ2h0IDUxNyAvU3Rl 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 34ey7jzOyu1nB9hBdoQ9LtHMwVUSD5X48b+7GKLPcHL8+PW3HD976uiRqeP4P5Ww/wXofTa8CmVu ZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUg L0Jhc2VGb250IC9BQUFBQUQrSGVsdmV0aWNhTmV1ZSAvRm9udERlc2NyaXB0b3IKNDMgMCBSIC9U b1VuaWNvZGUgNDQgMCBSIC9GaXJzdENoYXIgMzMgL0xhc3RDaGFyIDM1IC9XaWR0aHMgWyAyNzgg MCA1NzcgXQo+PgplbmRvYmoKNDQgMCBvYmoKPDwgL0xlbmd0aCAyNDEgL0ZpbHRlciAvRmxhdGVE ZWNvZGUgPj4Kc3RyZWFtCngBXZDNasQgFIX3PsVdThdDjLPpQoQyZSCL/tC0D2D0GoRGxZhF3r5X ZzqFLg54f77D8Xbn4XkIvkD3nqMZsYDzwWZc45YNwoSzD6wXYL0pt6r1zKIT6wge97XgMgQXQUoG 0H0Qspa8w+HJxgkfau8tW8w+zHD4Oo+tM24pfeOCoQBnSoFFR3YvOr3qBaFr6HGwNPdlPxL1t/G5 JwRKRER/jWSixTVpg1mHGZnkXMnLRTEM9t/odAUmd9sUvZJVnHOtmBSCyiouHmt5oifJTeRY3X65 alwPcA9stpwpa7tS+0aN5wPeD5liqgZNP8zmdrkKZW5kc3RyZWFtCmVuZG9iago0MyAwIG9iago8 PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9BQUFBQUQrSGVsdmV0aWNhTmV1ZSAv RmxhZ3MgNCAvRm9udEJCb3gKWy05NTEgLTQ4MSAxOTg3IDEwNzddIC9JdGFsaWNBbmdsZSAwIC9B c2NlbnQgOTUyIC9EZXNjZW50IC0yMTMgL0NhcEhlaWdodAo3MTQgL1N0ZW1WIDk1IC9MZWFkaW5n IDI4IC9YSGVpZ2h0IDUxNyAvU3RlbUggODAgL0F2Z1dpZHRoIDQ0NyAvTWF4V2lkdGggMjIyNQov Rm9udEZpbGUyIDQ1IDAgUiA+PgplbmRvYmoKNDUgMCBvYmoKPDwgL0xlbmd0aDEgMjI2NCAvTGVu Z3RoIDExMTEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBrVZNbxtVFL1vZvyR2BBP PhyTSeqZOImS2CUmbkpboWIX23JqFQVC1Rmk0lqJGxslbVTcKkggecMCL9igLoL4AWxA0w1yzKKR WhWEQIpYZ8eGHxAkFk3CeTPDYLehilDHuXPvPe++6/OOxndSu32nTEGqk0jppbXSOlmX5y+4E0t3 a6qds2/gIzfWV9acfJtImlxZ/fiGnXvHiIRCpVxatnN6An+6AsDO2Sn4scpabcPOPX/Ah1ZvLTnr 3gjy7rXShvP9tItcvVlaK9v1fhN+cv3WRzUnX4XPrt8uO/VMR37JXmu7M8QSJUiwMPt+AkzB3UL4 Okz+7t7jaz1v/MlkkfOi79+6zh39/vjbL5/MH0R9D6U5pF1OH2uP2DyM07D/Ptbrvoe8S8clNak/ zlrYIVA4zh5A3vP0OsUpSn0oHI7TA6xc7IRaICuREm8SU3OfViPZJnUjwS6ifv5XpPcRyofnKCB4 KCj8TDKWE8UmdS3o9xn7wmiyw8+aWRrZAlvx2gcn0Sqhqrlq1mTXkQgJANMaIjGh5k1xPP+uHjPU htqYX26oebVSWjalcctjodwwZlSTFvUq7u/pmpk2FDcsG8Y59JF4H2xBecNAhw+dDvAWNLOPIk+i qJrixIL+jm7Ws4qZzhqKpqk5c3tBN7ezimYYqPK6TMGYH9/m7ANn7zTW/XaXRfRAC6PR4D2RCROa ud1oKA2cxEJiWpORA+CkvEYczzVZekHnS+mYpnAgpsU08DCy6N2VKC7qOTDROJPuZySlbJukAZco aoOgF7AkfekFSfrycSTtOZakIZdph6QyOIe4pL1HSxp7jqCuwukjFK7bCtePULivQ+H+5ys84PIG yTDYDlgKD74ghSPHUfiVYyk85DLtUFgB5yGu8LCrcFoxyX1ooXD9qUeW/vMZ/r+Sj7RJzvYoxcKY fRlMe/tiztQKkpdCgDQMKQaz5yRRgQpsjGGyA0kRY78IP2HVR2U+2/BznMHsgflD+H3uwGa2UCju AQ1tYY7xqGuXMHByOubEjMLB7vOGA3g44CGJAxI24FuwwYMIM3Mv+RrTZK1P1mS2efArS6UOVoSv 9u8Jm/tnhR/BEmcQLgi/UZylOZsf+DfjE0E0BY+XFRiKYOYDM+57djH94AeQE/yg46PAp5CPI+f+ pMs4wAkG2hgrHFDaAC8HvOR3zxTmQLgNmODARBsgcADvH3fLNAembWDClYGBjQTz7LSoB/UBufcs xgzWeyFOxkOfI9jkydWMTH4EEdgk7AysANNhFdgGzH+1hffOP11GeV+cdBJ+agdCx2R85lJzp06n ZsODA6+y2Kh3hD2TD6CKffLo8pUr8/lgNBgYCkRHH/0bLi9fZq2DPGsVL72ZkaSLkhgZLbSFxYM8 KFjX4dc0a0dP3SW8WgUmMsl352Y1mUxmuM9fSCa5n03OnrHqGY5kv2+9/LWY4Vc2Xiiv3i3Xqkul t8v4j4b+BoAMCrcKZW5kc3RyZWFtCmVuZG9iago3IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0 eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0FBQUFBQytIZWx2ZXRpY2FOZXVlLUJvbGQgL0ZvbnRE ZXNjcmlwdG9yCjQ2IDAgUiAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAz MiAvTGFzdENoYXIgMjIyIC9XaWR0aHMgWyAyNzgKMCAwIDAgMCAxMDAwIDAgMCAyOTYgMjk2IDAg MCAwIDQwNyAyNzggMCA1NTYgNTU2IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgNzA0 IDc0MSA3NDEgNjQ4IDAgNzU5IDAgMCAwIDAgMCA5MDcgMCAwIDY2NyAwIDAgMCA2MTEgNzQxIDAg OTQ0IDAgMAowIDAgMCAwIDAgMCAwIDU3NCA2MTEgNTc0IDYxMSA1NzQgMzMzIDYxMSA1OTMgMjU4 IDAgNTc0IDI1OCA5MDYgNTkzIDYxMSA2MTEKNjExIDM4OSA1MzcgMzUyIDU5MyAwIDgxNCAwIDUx OSA1MTkgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgNjExIF0gPj4KZW5kb2JqCjQ2IDAgb2Jq Cjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0FBQUFBQytIZWx2ZXRpY2FOZXVl LUJvbGQgL0ZsYWdzIDMyIC9Gb250QkJveApbLTEwMTggLTQ4MSAxNDM3IDExNDFdIC9JdGFsaWNB bmdsZSAwIC9Bc2NlbnQgOTc1IC9EZXNjZW50IC0yMTcgL0NhcEhlaWdodAo3MTQgL1N0ZW1WIDE1 NyAvTGVhZGluZyAyOSAvWEhlaWdodCA1MTcgL1N0ZW1IIDEzMiAvQXZnV2lkdGggNDc4IC9NYXhX aWR0aAoxNTAwIC9Gb250RmlsZTIgNDcgMCBSID4+CmVuZG9iago0NyAwIG9iago8PCAvTGVuZ3Ro MSAxMDY5MiAvTGVuZ3RoIDYwNjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB1Vp5 dFxXeb/3vlmk0bw3M5pVs2lGT7NqNmk0I2uxPJa12JJtyYtsycHxbsc4DkkaO4nblBxwcOIQleKe AAlmC4TQQiMKBKEDiQ9wODT9A7cHKBDD6QkkhKXnlK2lSTzq73tvRpbtBNKSfzo6V/e++9777rf8 vuXemTtuP3GIWdm9TGKVA8f33cq0j3kvY/zhAyfviOjXYjv6VYdvPXK8dv1uxgzJIzfffVi/bpxi rPXiTYf2HdSv2avoyzdhQr/m3ejbbzp+x136tenz6D9989sO1O43/B7XM8f33VVbn13CdeSWfccP 6c+n3o8+c+vb/uyO2nUE/V233n6o9jyfwfUr+r0V/znGHWw7M2pzQvsfZkyAd21M99FKGw7ct8c2 8DveIr1E80+t+/1G6n/8jc+ce9VUbTWeN5zAc414Uf/gHelbSwkWMl7C/TuN54nKVZ+OBebq4IvM wOzM08GfYQ6WYK3Mz5qhbMaCHc9glGGxq2acrP2qZ9gzTGEFPBRh3uXXbKwbMq2csbP0VYTYInNh 4QB4kCMj9xz1DS8wSwdmOQSwEleSPngagyRItYCXJtbc8TTeamchLOZgFlyzp/FKEdSjmFK0BwSu 2liAOcEPHliEag3MgZVYfSUw52LH2X3sIfZBSGpnE0sKMwqFPSscDLfuYMfYaTbH3s7O47ZjaZzJ wsgU8SxzgEpmYoE1Ts18lvO52QW+dN/CMAt9CZqX9tyYXWA8E4mMHB2e53txITKYSEcxkjKR0Xkp Nrp1Rp2NnI2c3XDwbGQ0ctO+g/OGmNbjxqGzs/nIPNs2cxT/t89E5yuzgeXhodnZPtAxEB28gsfP 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 L0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvQUFBQUFFK0hlbHZldGljYU5ldWUt Qm9sZCAvRm9udERlc2NyaXB0b3IKNDggMCBSIC9Ub1VuaWNvZGUgNDkgMCBSIC9GaXJzdENoYXIg MzMgL0xhc3RDaGFyIDMzIC9XaWR0aHMgWyA2MzYgXSA+PgplbmRvYmoKNDkgMCBvYmoKPDwgL0xl bmd0aCAyMjMgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBXZC9bsQgEIR7nmLLS3HC vhohRRed5CI/ipMHwLBYSPGCMC789lmIc5FSbMHMfKth5XV4GigUkG852hEL+EAu4xq3bBEmnAOJ /gIu2HK8mmYXk4RkeNzXgstAPoJSAkC+M7KWvMPp0cUJH6r2mh3mQDOcPq9jU8YtpS9ckAp0Qmtw 6Hnds0kvZkGQDT0Pjv1Q9jNTf4mPPSFwIyb6n0o2OlyTsZgNzShU12l1u2mB5P5ZBzD5I3nptarj J2Zq/tepaP3ivZLdcuY27Q6taC0QCO+nSjHVBW2+AY2AcHgKZW5kc3RyZWFtCmVuZG9iago0OCAw IG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9BQUFBQUUrSGVsdmV0aWNh TmV1ZS1Cb2xkIC9GbGFncyA0IC9Gb250QkJveApbLTEwMTggLTQ4MSAxNDM3IDExNDFdIC9JdGFs aWNBbmdsZSAwIC9Bc2NlbnQgOTc1IC9EZXNjZW50IC0yMTcgL0NhcEhlaWdodAo3MTQgL1N0ZW1W IDE1NyAvTGVhZGluZyAyOSAvWEhlaWdodCA1MTcgL1N0ZW1IIDEzMiAvQXZnV2lkdGggNDc4IC9N YXhXaWR0aAoxNTAwIC9Gb250RmlsZTIgNTAgMCBSID4+CmVuZG9iago1MCAwIG9iago8PCAvTGVu Z3RoMSAyMDEyIC9MZW5ndGggOTg4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa1V zW/TZhh/Xjtx6VcaN/2MyWqTtnRNUCvaIjTtkLGkWuk0ZSswGySykBoa1tCKpYxJoOVANcnaetmV SuPCbZKRJjDV1Pa0AxeuHDhM24U/YJMmAcl+r515TelQNfFGfp/v5/29P1tPyldXTGqjComUKpTy y+Qu6WeIaOFaWfVs4RTk8YvLl0p1+1uiwMilxa8uerb0K+QPC2Z+3rPpBeSxBTg8m01CDi6Uytc9 W/oJ8sDiUqEel57Alkr56/Xz6Sls9Uq+ZHr5TTZkcnnpi3LdrkCOL1816/lMh/3ci+3YGXSBRvHw 5e1vcSUw4np4HM/UTGE11/Hun6xffMb999//60Muf//lx+9fSNWB4HpgBXnN9Q5ujfi4dphiwaeI fxlc510aluBQV4JtUIDC1JNgWyTTYRqgKHWCbKKDiS1oSRpq8ERosCGHtihE40hSqdcv66BJSjR4 wrjhzka0QV04WEk41K5mbhb70g61JOBluEAbRyV6yiaUEbTqB5ZW6kxsomqQYjhMphbYtImSCXTX 4Aq5CZzNQ6RQBHiQsEFB1Mg4if45CeC6qESr9B3dxk3DNFsLUVAI0SNBJoTK9DndojX6mtYRlmsn qV0IUkh4RDK6JGcdas7q9xhbMxxWW3XSFHsI5sXc+SMOsaSqZoppm30GQ0jCMapBE5PqtC0OTX+i xw3VUq2ZeUudVhfy83ZgyJUImJYxpto0pxexn9I1O2UovmoaxjvoE+B9UIJ0y0CHy/UOkK5r7CWS gslZ1RaHs/rHul1JK3YqbSiapmbs7axub6cVzTCQJflIgZi/Ag9zEzBLo4gf8LrMoQdaGJbFe8IS hjV727IUCzdxPXHNYVR34KY8RxzKOCyV1XkoFdcU7ohrcQ04jDR6Nydn5/QMkGgcScsrlFJ6B6Wt PlDktgFeq0tp+xuiNLQfSjv2RWnYR9pAqQzMYU5p596Uxl9DqM9wag+GKx7DlT0YjjQw3PV6hrt9 3ADZA7TdLsO9b4jhvv0w3L8vhqM+0gaGFWCOcoYP+gynFJv8jxYMV3Z9svSf3/D/pTy2g3L2B8nC DUwPPom9ydtGkjshNd9D1ENZZAgYZiL7TeBTrwkFmqxFZE1m31Sfsb5z1TEhVyXh3MsZ4YE711Fw A7PobRhxGb+pianJYxNHe3q7h+OHpBjbbXYjh926s3b69JlPI8Od0Wis/46vXbiwxu5Wz7K7uZGM LrLLoqIO/KvlqmddfPweVLtNR11l94Z/LSY0rVwpTp8YH3eDDOPau7WE0U3v8ZVJfGAuXjPLxUL+ I3PFPHJiaXGe/gaH18A3CmVuZHN0cmVhbQplbmRvYmoKNTEgMCBvYmoKPDwgL1RpdGxlIChyZWNv dmVyaWVzLWJlY25obWFyay12MDMtcGRmKSAvUHJvZHVjZXIgKG1hY09TIFZlcnNpb24gMTUuNy4z IFwoQnVpbGQgMjRHNDE5XCkgUXVhcnR6IFBERkNvbnRleHQpCi9DcmVhdG9yIChOdW1iZXJzKSAv Q3JlYXRpb25EYXRlIChEOjIwMjYwNDA4MTEwNzU5WjAwJzAwJykgL01vZERhdGUgKEQ6MjAyNjA0 MDgxMTA3NTlaMDAnMDAnKQo+PgplbmRvYmoKeHJlZgowIDUyCjAwMDAwMDAwMDAgNjU1MzUgZiAK MDAwMDAxNDE1MSAwMDAwMCBuIAowMDAwMDI2MjQxIDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAg biAKMDAwMDAxNDI2NCAwMDAwMCBuIAowMDAwMDIxNDcyIDAwMDAwIG4gCjAwMDAwMjY0NDEgMDAw MDAgbiAKMDAwMDAzOTQxNiAwMDAwMCBuIAowMDAwMDM3NDY0IDAwMDAwIG4gCjAwMDAwMjQ5OTUg MDAwMDAgbiAKMDAwMDAxNDU2OCAwMDAwMCBuIAowMDAwMDE0ODUzIDAwMDAwIG4gCjAwMDAwMTQ5 MjIgMDAwMDAgbiAKMDAwMDAxNTIwNyAwMDAwMCBuIAowMDAwMDE1Mjc2IDAwMDAwIG4gCjAwMDAw MTU1NTkgMDAwMDAgbiAKMDAwMDAxNTYyOCAwMDAwMCBuIAowMDAwMDE1OTExIDAwMDAwIG4gCjAw MDAwMTU5ODAgMDAwMDAgbiAKMDAwMDAxNjI2MyAwMDAwMCBuIAowMDAwMDE2MzMyIDAwMDAwIG4g CjAwMDAwMTY2MTUgMDAwMDAgbiAKMDAwMDAxNjY4NCAwMDAwMCBuIAowMDAwMDE2OTYzIDAwMDAw IG4gCjAwMDAwMTcwMzIgMDAwMDAgbiAKMDAwMDAxNzMxMSAwMDAwMCBuIAowMDAwMDE3MzgwIDAw MDAwIG4gCjAwMDAwMTc2NTYgMDAwMDAgbiAKMDAwMDAxNzcyNSAwMDAwMCBuIAowMDAwMDE4MDAx IDAwMDAwIG4gCjAwMDAwMTgwNzAgMDAwMDAgbiAKMDAwMDAxODM0NiAwMDAwMCBuIAowMDAwMDE4 NDE1IDAwMDAwIG4gCjAwMDAwMTg2OTAgMDAwMDAgbiAKMDAwMDA0NjQ5NCAwMDAwMCBuIAowMDAw MDI2Mzk3IDAwMDAwIG4gCjAwMDAwMjYyMDQgMDAwMDAgbiAKMDAwMDAxODc1OSAwMDAwMCBuIAow MDAwMDIxNTA4IDAwMDAwIG4gCjAwMDAwMjUwMzEgMDAwMDAgbiAKMDAwMDAyNjMzMyAwMDAwMCBu IAowMDAwMDI3MTU3IDAwMDAwIG4gCjAwMDAwMjc0MjMgMDAwMDAgbiAKMDAwMDAzNzk1MiAwMDAw MCBuIAowMDAwMDM3NjM4IDAwMDAwIG4gCjAwMDAwMzgyMTcgMDAwMDAgbiAKMDAwMDA0MDA2MyAw MDAwMCBuIAowMDAwMDQwMzM3IDAwMDAwIG4gCjAwMDAwNDY5NjQgMDAwMDAgbiAKMDAwMDA0NjY2 OCAwMDAwMCBuIAowMDAwMDQ3MjM3IDAwMDAwIG4gCjAwMDAwNDgzMTIgMDAwMDAgbiAKdHJhaWxl cgo8PCAvU2l6ZSA1MiAvUm9vdCA0MCAwIFIgL0luZm8gNTEgMCBSIC9JRCBbIDw3OWJjYTNhZmVj NmRiMzQ1NWU1NWJmNzU5NjFhNTJiMT4KPDc5YmNhM2FmZWM2ZGIzNDU1ZTU1YmY3NTk2MWE1MmIx PiBdID4+CnN0YXJ0eHJlZgo0ODUzNAolJUVPRgo= --00000000000013c8b6064ef100c4--