Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qGKlh-00064Q-55 for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Jul 2023 14:43:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qGKlf-0005C3-U1 for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Jul 2023 14:43:07 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qGKlf-0005Bu-Bf for pgsql-hackers@lists.postgresql.org; Mon, 03 Jul 2023 14:43:07 +0000 Received: from mail-ot1-x336.google.com ([2607:f8b0:4864:20::336]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qGKla-001y9N-FF for pgsql-hackers@postgresql.org; Mon, 03 Jul 2023 14:43:06 +0000 Received: by mail-ot1-x336.google.com with SMTP id 46e09a7af769-6b73741a632so3487189a34.3 for ; Mon, 03 Jul 2023 07:43:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=neon-tech.20221208.gappssmtp.com; s=20221208; t=1688395381; x=1690987381; h=in-reply-to:references:message-id:from:to:subject:cc:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Nyz3qTcYmc2SuGl2dmuC8kmT6gGD+m8e15YEW9oxqkQ=; b=0eM0osa0RWkZs0Cjavt/h5Ia3FkHDNUL7+JkXU39DHO9Xijva19UsXkbjv2HkwHwNO 4vc5fDRs0Hw5w7DNrb+x1HbugC38dmmERV9Uc44UxQDmx3AerSKnByooZ8ia6Bb0Ia70 YiiuWVQqeuNkNprybLbP4SIhGcsmZf9NKe9tuxwbxRBed3cxLymzZIVNmHNAEQpZPdO0 6NZZmN53qwMXOYKx4HxlbNnrZBOoXlGid3KMsOKxCgqzT0NOnpmtinCNY+bV9y6cSQGl 04h3y/qg9nLoIp97FR/HD8d9tNoMgOuBSO0ImuwJkyt5zl0QpOieB7naL3e/xlO48UNi ZJtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688395381; x=1690987381; h=in-reply-to:references:message-id:from:to:subject:cc:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Nyz3qTcYmc2SuGl2dmuC8kmT6gGD+m8e15YEW9oxqkQ=; b=ZIuuW8cxzlMtZQPPicRQksQF2p97TDg2pdUvPhOTjozuDkrL2fYt1QZqFDJT96pzl7 VzDT517LvyRlhnUss8smnD+3isCelQNV05lDINYnxFD5+etpvAUm53Elp/zj3ZqjyZ1K aSZbsu6kA3jdlwGLL7tp1kt8T6dI3/6S54QuU5UQA0m55pIwvIPYwffgOBcFEYY1Bh0y hWgByaPKy/ivLXDa0eTt9AKvFvW7lcKBjlOjHL6pdoDAygaLRhce+O9ysFiQ967CtrWn 0s4r9v7GpV0DjhmA2EBOE9l8X4TVAU5PDQLxUcvcDj/IUZ9Rm7jyNec5Eul9PSg2U7fQ SPuw== X-Gm-Message-State: AC+VfDxltO0rJ7e9VAyT5nLyHNCk4mlTq/KsoooraLO3myADJdGhO7Jv l8WsLYUaQvy/0urJDDvOFlKSYRVhR+qASllTbWYZiQ== X-Google-Smtp-Source: ACHHUZ4+ZYfvfT0GJGj7o/805SqeI06OFjJpM07BUdstsjLnB1TTTFY+Va/YU59sxughAb4WNcK6Mw== X-Received: by 2002:a9d:6289:0:b0:6b8:990d:e115 with SMTP id x9-20020a9d6289000000b006b8990de115mr8326509otk.29.1688395380600; Mon, 03 Jul 2023 07:43:00 -0700 (PDT) Received: from localhost ([2607:fb90:f280:130d:3996:e070:71ee:42fb]) by smtp.gmail.com with ESMTPSA id bt23-20020a05683039d700b006b29a73efb5sm9177784otb.7.2023.07.03.07.42.59 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 03 Jul 2023 07:42:59 -0700 (PDT) Content-Type: multipart/mixed; boundary=9ec3b9dac344773d3740327eca5971cd40c5c91dccea436a226057bccc8e Mime-Version: 1.0 Date: Mon, 03 Jul 2023 09:42:58 -0500 Cc: "PostgreSQL-development" Subject: Re: BUG #17946: LC_MONETARY & DO LANGUAGE plperl - BUG To: , "Heikki Linnakangas" , "Tom Lane" , From: "Tristan Partin" Message-Id: X-Mailer: aerc 0.15.2-76-g69094e332779 References: <17946-3e84cb577e9551c3@postgresql.org> <1564676.1685043220@sss.pgh.pa.us> <555bb26e-c27c-ab65-028f-3fd5b82df9de@iki.fi> <1645ebad-798f-87ad-43ac-72d2bf14d2d6@cd> In-Reply-To: <1645ebad-798f-87ad-43ac-72d2bf14d2d6@cd> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --9ec3b9dac344773d3740327eca5971cd40c5c91dccea436a226057bccc8e Content-Type: multipart/alternative; boundary=4703990bd778c26322af0b8b3f73c746e4eac72affe8ab6f8dcda2998545 --4703990bd778c26322af0b8b3f73c746e4eac72affe8ab6f8dcda2998545 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Fri Jun 30, 2023 at 7:13 AM CDT, Joe Conway wrote: > On 6/29/23 22:13, Tristan Partin wrote: > > On Mon Jun 5, 2023 at 11:00 AM CDT, Heikki Linnakangas wrote: > >> I think the uselocale() call renders ineffective the setlocale() calls= =20 > >> that we make later. Maybe we should replace our setlocale() calls with= =20 > >> uselocale(), too. > >=20 > > For what it's worth to everyone else in the thread (especially Joe), I > > have a patch locally that fixes the mentioned bug using uselocale(). I > > am not sure that it is worth committing for v16 given how _large_ (the > > patch is actually quite small, +216 -235) of a change it is. I am going > > to spend tomorrow combing over it a bit more and evaluating other > > setlocale uses in the codebase. > > (moving thread to hackers) > > I don't see a patch attached -- how is it different than what I posted a= =20 > week ago and added to the commitfest here? > > https://commitfest.postgresql.org/43/4413/ > > FWIW, if you are proposing replacing all uses of setlocale() with=20 > uselocale() as Heikki suggested: > > 1/ I don't think that is pg16 material, and almost certainly not=20 > back-patchable to earlier. I am in agreement. > 2/ It probably does not solve all of the identified issues caused by the= =20 > newer perl libraries by itself, i.e. I believe the patch posted to the=20 > CF is still needed. Perhaps. I do think your patch is still valuable regardless. Works for backpatching and is just good defensive programming. I have added myself as a reviewer. > 3/ I believe it is probably the right way to go for pg17+, but I would=20 > love to hear opinions from Jeff Davis, Peter Eisentraut, and/or Thomas=20 > Munroe (the locale code "usual suspects" ;-)), and others, about that. Thanks for your patience. Attached is a patch that should cover all the problematic use cases of setlocale(). There are some setlocale() calls in tests, initdb, and ecpg left. I plan to get to ecpglib before the final version of this patch after I abstract over Windows not having uselocale(). I think leaving initdb and tests as is would be fine, but I am also happy to just permanently purge setlocale() from the codebase if people see value in that. We could also poison[0] setlocale() at that point. [0]: https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html --=20 Tristan Partin Neon (https://neon.tech) --4703990bd778c26322af0b8b3f73c746e4eac72affe8ab6f8dcda2998545-- --9ec3b9dac344773d3740327eca5971cd40c5c91dccea436a226057bccc8e Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0001-Skip-checking-for-uselocale-on-Windows.patch Content-Type: text/x-patch; charset=utf-8; name=v1-0001-Skip-checking-for-uselocale-on-Windows.patch RnJvbSA1Njg4YmMyYjJjNjMzMWY0MzdhNzJiNmE0MjkxOTljNTQxNmNjZDc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRlY2g+CkRh dGU6IEZyaSwgMzAgSnVuIDIwMjMgMDk6MzE6MDQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxIDEv M10gU2tpcCBjaGVja2luZyBmb3IgdXNlbG9jYWxlIG9uIFdpbmRvd3MKCldpbmRvd3MgZG9lc24n dCBoYXZlIHVzZWxvY2FsZSwgc28gc2tpcCBpdC4KLS0tCiBtZXNvbi5idWlsZCB8IDIgKy0KIDEg ZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBh L21lc29uLmJ1aWxkIGIvbWVzb24uYnVpbGQKaW5kZXggZmJlYzk5Nzk0Ny4uZGY3NmYxMDgyMiAx MDA2NDQKLS0tIGEvbWVzb24uYnVpbGQKKysrIGIvbWVzb24uYnVpbGQKQEAgLTI0MzksNyArMjQz OSw3IEBAIGZ1bmNfY2hlY2tzID0gWwogICBbJ3N0cnNpZ25hbCddLAogICBbJ3N5bmNfZmlsZV9y YW5nZSddLAogICBbJ3N5bmNmcyddLAotICBbJ3VzZWxvY2FsZSddLAorICBbJ3VzZWxvY2FsZScs IHsnc2tpcCc6IGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJ31dLAogICBbJ3djc3RvbWJzX2wnXSwK IF0KIAotLSAKVHJpc3RhbiBQYXJ0aW4KTmVvbiAoaHR0cHM6Ly9uZW9uLnRlY2gpCgo= --9ec3b9dac344773d3740327eca5971cd40c5c91dccea436a226057bccc8e Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0002-Add-locale_is_c-function.patch Content-Type: text/x-patch; charset=utf-8; name=v1-0002-Add-locale_is_c-function.patch RnJvbSBkNTJhYjc4NTFlOTYzOGUzNmNkOTk4NTkwMTRkN2FhMzExNTRlNjAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRlY2g+CkRh dGU6IEZyaSwgMzAgSnVuIDIwMjMgMTE6MTM6MjkgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxIDIv M10gQWRkIGxvY2FsZV9pc19jIGZ1bmN0aW9uCgpJbiBzb21lIHBsYWNlcyB0aHJvdWdob3V0IHRo ZSBjb2RlYmFzZSwgdGhlcmUgYXJlIHN0cmluZyBjb21wYXJpc29ucyBmb3IKbG9jYWxlcyBtYXRj aGluZyBDIG9yIFBPU0lYLiBFbmNhcHN1bGF0ZSB0aGlzIGxvZ2ljIGludG8gYSBzaW5nbGUKZnVu Y3Rpb24gYW5kIHVzZSBpdC4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMg fCAzNyArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9p bml0L3Bvc3Rpbml0LmMgfCAgNCArLS0tCiBzcmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMg ICAgfCAgNSArKy0tLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgIHwgIDEgKwog NCBmaWxlcyBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlLmMKaW5kZXggNTE0ZDRhOWVlYi4uYjQ1NWVmM2FmZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGUuYwpAQCAtMTU0LDYgKzE1NCwyMSBAQCBzdGF0aWMgdm9pZCBp Y3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKFVDb2xsYXRvciAqY29sbGF0b3IsIGNvbnN0IGNo YXIgKmxvYywKIAkJCQkJCQkJCQkgVUVycm9yQ29kZSAqc3RhdHVzKTsKICNlbmRpZgogCisvKgor ICogQ2hlY2sgaWYgYSBsb2NhbGUgaXMgdGhlIEMgbG9jYWxlCisgKgorICogUE9TSVggaXMgYW4g YWxpYXMgZm9yIEMuIFBhc3NpbmcgaW5nb3JlX2Nhc2UgYXMgdHJ1ZSB3aWxsIHVzZQorICogcGdf c3RyY2FzZWNtcCgpIGluc3RlYWQgb2Ygc3RyY21wKCkuCisgKi8KK2Jvb2wKK2xvY2FsZV9pc19j KGNvbnN0IGNoYXIgKmxvY2FsZSwgYm9vbCBpZ25vcmVfY2FzZSkKK3sKKwlpZiAoIWlnbm9yZV9j YXNlKQorCQlyZXR1cm4gc3RyY21wKGxvY2FsZSwgIkMiKSA9PSAwIHx8IHN0cmNtcChsb2NhbGUs ICJQT1NJWCIpID09IDA7CisKKwlyZXR1cm4gcGdfc3RyY2FzZWNtcChsb2NhbGUsICJDIikgPT0g MCB8fCBwZ19zdHJjYXNlY21wKGxvY2FsZSwgIlBPU0lYIikgPT0gMDsKK30KKwogLyoKICAqIHBn X3Blcm1fc2V0bG9jYWxlCiAgKgpAQCAtMTIzOSwxMCArMTI1NCw4IEBAIGxvb2t1cF9jb2xsYXRp b25fY2FjaGUoT2lkIGNvbGxhdGlvbiwgYm9vbCBzZXRfZmxhZ3MpCiAJCQlkYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0ck5vdE51bGwoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjdHlw ZSk7CiAJCQljb2xsY3R5cGUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKIAotCQkJY2Fj aGVfZW50cnktPmNvbGxhdGVfaXNfYyA9ICgoc3RyY21wKGNvbGxjb2xsYXRlLCAiQyIpID09IDAp IHx8Ci0JCQkJCQkJCQkJIChzdHJjbXAoY29sbGNvbGxhdGUsICJQT1NJWCIpID09IDApKTsKLQkJ CWNhY2hlX2VudHJ5LT5jdHlwZV9pc19jID0gKChzdHJjbXAoY29sbGN0eXBlLCAiQyIpID09IDAp IHx8Ci0JCQkJCQkJCQkgICAoc3RyY21wKGNvbGxjdHlwZSwgIlBPU0lYIikgPT0gMCkpOworCQkJ Y2FjaGVfZW50cnktPmNvbGxhdGVfaXNfYyA9IGxvY2FsZV9pc19jKGNvbGxjb2xsYXRlLCBmYWxz ZSk7CisJCQljYWNoZV9lbnRyeS0+Y3R5cGVfaXNfYyA9IGxvY2FsZV9pc19jKGNvbGxjdHlwZSwg ZmFsc2UpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMTI5MCwxMiArMTMwMyw4IEBAIGxjX2NvbGxh dGVfaXNfYyhPaWQgY29sbGF0aW9uKQogCQlpZiAoIWxvY2FsZXB0cikKIAkJCWVsb2coRVJST1Is ICJpbnZhbGlkIExDX0NPTExBVEUgc2V0dGluZyIpOwogCi0JCWlmIChzdHJjbXAobG9jYWxlcHRy LCAiQyIpID09IDApCi0JCQlyZXN1bHQgPSB0cnVlOwotCQllbHNlIGlmIChzdHJjbXAobG9jYWxl cHRyLCAiUE9TSVgiKSA9PSAwKQotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJZWxzZQotCQkJcmVzdWx0 ID0gZmFsc2U7CisJCXJlc3VsdCA9IGxvY2FsZV9pc19jKGxvY2FsZXB0ciwgZmFsc2UpOworCiAJ CXJldHVybiAoYm9vbCkgcmVzdWx0OwogCX0KIApAQCAtMTM0MywxMiArMTM1Miw4IEBAIGxjX2N0 eXBlX2lzX2MoT2lkIGNvbGxhdGlvbikKIAkJaWYgKCFsb2NhbGVwdHIpCiAJCQllbG9nKEVSUk9S LCAiaW52YWxpZCBMQ19DVFlQRSBzZXR0aW5nIik7CiAKLQkJaWYgKHN0cmNtcChsb2NhbGVwdHIs ICJDIikgPT0gMCkKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCWVsc2UgaWYgKHN0cmNtcChsb2NhbGVw dHIsICJQT1NJWCIpID09IDApCi0JCQlyZXN1bHQgPSB0cnVlOwotCQllbHNlCi0JCQlyZXN1bHQg PSBmYWxzZTsKKwkJcmVzdWx0ID0gbG9jYWxlX2lzX2MobG9jYWxlcHRyLCBmYWxzZSk7CisKIAkJ cmV0dXJuIChib29sKSByZXN1bHQ7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9pbml0L3Bvc3Rpbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKaW5k ZXggMGY5YjkyYjMyZS4uYTkyYTBjNDM4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv aW5pdC9wb3N0aW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwpA QCAtNDE5LDkgKzQxOSw3IEBAIENoZWNrTXlEYXRhYmFzZShjb25zdCBjaGFyICpuYW1lLCBib29s IGFtX3N1cGVydXNlciwgYm9vbCBvdmVycmlkZV9hbGxvd19jb25uZWN0CiAJCQkJCQkgICAiIHdo aWNoIGlzIG5vdCByZWNvZ25pemVkIGJ5IHNldGxvY2FsZSgpLiIsIGN0eXBlKSwKIAkJCQkgZXJy aGludCgiUmVjcmVhdGUgdGhlIGRhdGFiYXNlIHdpdGggYW5vdGhlciBsb2NhbGUgb3IgaW5zdGFs bCB0aGUgbWlzc2luZyBsb2NhbGUuIikpKTsKIAotCWlmIChzdHJjbXAoY3R5cGUsICJDIikgPT0g MCB8fAotCQlzdHJjbXAoY3R5cGUsICJQT1NJWCIpID09IDApCi0JCWRhdGFiYXNlX2N0eXBlX2lz X2MgPSB0cnVlOworCWRhdGFiYXNlX2N0eXBlX2lzX2MgPSBsb2NhbGVfaXNfYyhjdHlwZSwgZmFs c2UpOwogCiAJaWYgKGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkK IAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9tYi9tYnV0aWxzLmMKaW5kZXggNjdhMWFiMmFiMi4uOTk3MTU2NTE1YyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21iL21idXRpbHMuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIm1iL3BnX3dj aGFyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11 dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgogI2luY2x1ZGUgInV0aWxzL3N5 c2NhY2hlLmgiCiAjaW5jbHVkZSAidmFyYXR0LmgiCiAKQEAgLTEyMzcsOSArMTIzOCw3IEBAIHBn X2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCiAJaW50CQkJ bmV3X21zZ2VuYzsKIAogI2lmbmRlZiBXSU4zMgotCWNvbnN0IGNoYXIgKmN0eXBlID0gc2V0bG9j YWxlKExDX0NUWVBFLCBOVUxMKTsKLQotCWlmIChwZ19zdHJjYXNlY21wKGN0eXBlLCAiQyIpID09 IDAgfHwgcGdfc3RyY2FzZWNtcChjdHlwZSwgIlBPU0lYIikgPT0gMCkKKwlpZiAobG9jYWxlX2lz X2MobG9jYWxlX2N0eXBlLCB0cnVlKSkKICNlbmRpZgogCQlpZiAoZW5jb2RpbmcgIT0gUEdfU1FM X0FTQ0lJICYmCiAJCQlyYXdfcGdfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoZG9tYWlubmFtZSwg ZW5jb2RpbmcpKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggYi9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAppbmRleCBlMmE3MjQzNTQyLi44NzJiZWY3OThh IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAtNTQsNiArNTQsNyBAQCBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBkYXRhYmFzZV9jdHlwZV9pc19jOwogZXh0ZXJuIGJvb2wgY2hlY2tfbG9jYWxlKGlu dCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlLCBjaGFyICoqY2Fub25uYW1lKTsKIGV4dGVy biBjaGFyICpwZ19wZXJtX3NldGxvY2FsZShpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxvY2Fs ZSk7CiAKK2V4dGVybiBib29sIGxvY2FsZV9pc19jKGNvbnN0IGNoYXIgKmxvY2FsZSwgYm9vbCBp Z25vcmVfY2FzZSk7CiBleHRlcm4gYm9vbCBsY19jb2xsYXRlX2lzX2MoT2lkIGNvbGxhdGlvbik7 CiBleHRlcm4gYm9vbCBsY19jdHlwZV9pc19jKE9pZCBjb2xsYXRpb24pOwogCi0tIApUcmlzdGFu IFBhcnRpbgpOZW9uIChodHRwczovL25lb24udGVjaCkKCg== --9ec3b9dac344773d3740327eca5971cd40c5c91dccea436a226057bccc8e Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0003-Use-uselocale-instead-of-setlocale.patch Content-Type: text/x-patch; charset=utf-8; name=v1-0003-Use-uselocale-instead-of-setlocale.patch RnJvbSA3NWI1ZjdhNGU0ZWNhZjQ5NDMwMjcyMWIzNWM5MTlkNWUxOTNiNmQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRlY2g+CkRh dGU6IE1vbiwgMyBKdWwgMjAyMyAwODo1MTo1OSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMy8z XSBVc2UgdXNlbG9jYWxlKCkgaW5zdGVhZCBvZiBzZXRsb2NhbGUoKQoKc2V0bG9jYWxlKCkgaGFz IGJlZW4gYSB0aG9ybiBpbiBQb3N0Z3JlcydzIHNpZGUgZm9yIGEgd2hpbGUuIE1vc3QKcmVjZW50 bHkgdGhpcyBoYXMgbWFuaWZlc3RlZCBpbiBidWcgIzE3OTQ2IHdoZXJlIGxvYWRpbmcgbGlicGVy bCB3b3VsZApjYXVzZSB0aGUgbG9jYWxpemF0aW9uIHRvIGNoYW5nZSBvdXQgZnJvbSB1bmRlciBQ b3N0Z3Jlcy4KLS0tCiBzcmMvYmFja2VuZC9tYWluL21haW4uYyAgICAgICAgICAgIHwgIDI3ICst CiBzcmMvYmFja2VuZC91dGlscy9hZHQvY2FzaC5jICAgICAgIHwgIDI5ICsrKwogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyB8ICAxMSArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3BnX2xvY2FsZS5jICB8IDQwNCArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogc3JjL2Jh Y2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMv bWIvbWJ1dGlscy5jICAgICB8ICAgMiArLQogc3JjL2NvbW1vbi9leGVjLmMgICAgICAgICAgICAg ICAgICB8ICAxNiAtLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgICB8ICAgMiAr LQogOCBmaWxlcyBjaGFuZ2VkLCAyNzUgaW5zZXJ0aW9ucygrKSwgMjIwIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL21haW4vbWFpbi5jIGIvc3JjL2JhY2tlbmQvbWFpbi9t YWluLmMKaW5kZXggZWQxMWU4YmU3Zi4uNWIwZTlmY2NkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvbWFpbi9tYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvbWFpbi9tYWluLmMKQEAgLTEzMCwxMyAr MTMwLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWluaXRfbG9jYWxlKCJMQ19O VU1FUklDIiwgTENfTlVNRVJJQywgIkMiKTsKIAlpbml0X2xvY2FsZSgiTENfVElNRSIsIExDX1RJ TUUsICJDIik7CiAKLQkvKgotCSAqIE5vdyB0aGF0IHdlIGhhdmUgYWJzb3JiZWQgYXMgbXVjaCBh cyB3ZSB3aXNoIHRvIGZyb20gdGhlIGxvY2FsZQotCSAqIGVudmlyb25tZW50LCByZW1vdmUgYW55 IExDX0FMTCBzZXR0aW5nLCBzbyB0aGF0IHRoZSBlbnZpcm9ubWVudAotCSAqIHZhcmlhYmxlcyBp bnN0YWxsZWQgYnkgcGdfcGVybV9zZXRsb2NhbGUgaGF2ZSBmb3JjZS4KLQkgKi8KLQl1bnNldGVu digiTENfQUxMIik7Ci0KIAkvKgogCSAqIENhdGNoIHN0YW5kYXJkIG9wdGlvbnMgYmVmb3JlIGRv aW5nIG11Y2ggZWxzZSwgaW4gcGFydGljdWxhciBiZWZvcmUgd2UKIAkgKiBpbnNpc3Qgb24gbm90 IGJlaW5nIHJvb3QuCkBAIC0zMDcsOCArMzAwLDI0IEBAIHN0YXJ0dXBfaGFja3MoY29uc3QgY2hh ciAqcHJvZ25hbWUpCiBzdGF0aWMgdm9pZAogaW5pdF9sb2NhbGUoY29uc3QgY2hhciAqY2F0ZWdv cnluYW1lLCBpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxvY2FsZSkKIHsKLQlpZiAocGdfcGVy bV9zZXRsb2NhbGUoY2F0ZWdvcnksIGxvY2FsZSkgPT0gTlVMTCAmJgotCQlwZ19wZXJtX3NldGxv Y2FsZShjYXRlZ29yeSwgIkMiKSA9PSBOVUxMKQorCS8qIFNpbmNlIHdlIGFyZSBpbml0aWFsaXpp bmcgZ2xvYmFsIGxvY2FsZXMsIE5VTEwgaXMgYW4gaW52YWxpZCBhcmd1bWVudC4gKi8KKwlBc3Nl cnQobG9jYWxlKTsKKworCS8qCisJICogdXNlbG9jYWxlKCkgYW5kIGZyaWVuZHMgZG9uJ3QgaGF2 ZSBhbiBlcXVpdmFsZW50IHRvCisJICogc2V0bG9jYWxlKGNhdGVnb3J5LCBOVUxMKSwgc28gd2Ug aGF2ZSB0byBzdGFzaCB0aGUgYWN0dWFsIGxvY2FsZSBzdHJpbmcKKwkgKiBpbiBjYXNlIGl0IGlz IG5lZWRlZC4gVG8gZG8gdGhhdCwgd2UgY2Fub25pY2FsaXplIHRoZSBlbXB0eSBzdHJpbmcKKwkg KiBhcmd1bWVudCBoZXJlLiBwZ19zZXRsb2NhbGUoKSBhc3NlcnRzIHRoYXQgaXQgZG9lc24ndCBy ZWNlaXZlIHRoZSBlbXB0eQorCSAqIHN0cmluZy4KKwkgKi8KKwlpZiAobG9jYWxlWzBdID09ICdc MCcpCisJCWxvY2FsZSA9IHNldGxvY2FsZShjYXRlZ29yeSwgbG9jYWxlKTsKKworCWlmIChsb2Nh bGUgPT0gTlVMTCkKKwkJZWxvZyhGQVRBTCwgIiVzIGxvY2FsZSB3YXMgbm90IHByb3Blcmx5IGNh bm9uaWNhbGl6ZWQiLCBjYXRlZ29yeW5hbWUpOworCisJaWYgKHBnX3NldGxvY2FsZShjYXRlZ29y eSwgbG9jYWxlKSA9PSBOVUxMICYmCisJCXBnX3NldGxvY2FsZShjYXRlZ29yeSwgIkMiKSA9PSBO VUxMKQogCQllbG9nKEZBVEFMLCAiY291bGQgbm90IGFkb3B0IFwiJXNcIiBsb2NhbGUgbm9yIEMg bG9jYWxlIGZvciAlcyIsCiAJCQkgbG9jYWxlLCBjYXRlZ29yeW5hbWUpOwogfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Nhc2guYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9j YXNoLmMKaW5kZXggMzJmYmFkMmY1Ny4uNWMyNTRkOTEyZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Nhc2guYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvY2FzaC5jCkBA IC0xMTEsNiArMTExLDExIEBAIGNhc2hfaW4oUEdfRlVOQ1RJT05fQVJHUykKIAkJCSAgICpjc3lt Ym9sOwogCXN0cnVjdCBsY29udiAqbGNvbnZlcnQgPSBQR0xDX2xvY2FsZWNvbnYoKTsKIAorCWlm IChsY29udmVydCA9PSBOVUxMKQorCQllcmV0dXJuKGVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJIGVycm1zZygiY291bGQgbm90 IGFsbG9jYXRlIG1lbW9yeSBmb3IgbG9jYWxlIGluZm9ybWF0aW9uIikpKTsKKwogCS8qCiAJICog ZnJhY19kaWdpdHMgd2lsbCBiZSBDSEFSX01BWCBpbiBzb21lIGxvY2FsZXMsIG5vdGFibHkgQy4g IEhvd2V2ZXIsIGp1c3QKIAkgKiB0ZXN0aW5nIGZvciA9PSBDSEFSX01BWCBpcyByaXNreSwgYmVj YXVzZSBvZiBjb21waWxlcnMgbGlrZSBnY2MgdGhhdApAQCAtMzI1LDYgKzMzMCwxMSBAQCBjYXNo X291dChQR19GVU5DVElPTl9BUkdTKQogCQkJCXNlcF9ieV9zcGFjZTsKIAlzdHJ1Y3QgbGNvbnYg Kmxjb252ZXJ0ID0gUEdMQ19sb2NhbGVjb252KCk7CiAKKwlpZiAobGNvbnZlcnQgPT0gTlVMTCkK KwkJZXJldHVybihmY2luZm8tPmNvbnRleHQsIChEYXR1bSkgMCwKKwkJCQkoZXJyY29kZShFUlJD T0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1v cnkgZm9yIGxvY2FsZSBpbmZvcm1hdGlvbiIpKSk7CisKIAkvKiBzZWUgY29tbWVudHMgYWJvdXQg ZnJhY19kaWdpdHMgaW4gY2FzaF9pbigpICovCiAJcG9pbnRzID0gbGNvbnZlcnQtPmZyYWNfZGln aXRzOwogCWlmIChwb2ludHMgPCAwIHx8IHBvaW50cyA+IDEwKQpAQCAtMTAzNiw2ICsxMDQ2LDEx IEBAIGNhc2hfbnVtZXJpYyhQR19GVU5DVElPTl9BUkdTKQogCWludAkJCWZwb2ludDsKIAlzdHJ1 Y3QgbGNvbnYgKmxjb252ZXJ0ID0gUEdMQ19sb2NhbGVjb252KCk7CiAKKwlpZiAobGNvbnZlcnQg PT0gTlVMTCkKKwkJZXJldHVybihmY2luZm8tPmNvbnRleHQsIChEYXR1bSkgMCwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhbGxv Y2F0ZSBtZW1vcnkgZm9yIGxvY2FsZSBpbmZvcm1hdGlvbiIpKSk7CisKIAkvKiBzZWUgY29tbWVu dHMgYWJvdXQgZnJhY19kaWdpdHMgaW4gY2FzaF9pbigpICovCiAJZnBvaW50ID0gbGNvbnZlcnQt PmZyYWNfZGlnaXRzOwogCWlmIChmcG9pbnQgPCAwIHx8IGZwb2ludCA+IDEwKQpAQCAtMTA5NSw2 ICsxMTEwLDExIEBAIG51bWVyaWNfY2FzaChQR19GVU5DVElPTl9BUkdTKQogCURhdHVtCQludW1l cmljX3NjYWxlOwogCXN0cnVjdCBsY29udiAqbGNvbnZlcnQgPSBQR0xDX2xvY2FsZWNvbnYoKTsK IAorCWlmIChsY29udmVydCA9PSBOVUxMKQorCQllcmV0dXJuKGZjaW5mby0+Y29udGV4dCwgKERh dHVtKSAwLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJIGVycm1z ZygiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbG9jYWxlIGluZm9ybWF0aW9uIikpKTsK KwogCS8qIHNlZSBjb21tZW50cyBhYm91dCBmcmFjX2RpZ2l0cyBpbiBjYXNoX2luKCkgKi8KIAlm cG9pbnQgPSBsY29udmVydC0+ZnJhY19kaWdpdHM7CiAJaWYgKGZwb2ludCA8IDAgfHwgZnBvaW50 ID4gMTApCkBAIC0xMTI4LDYgKzExNDgsMTEgQEAgaW50NF9jYXNoKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJaW50CQkJaTsKIAlzdHJ1Y3QgbGNvbnYgKmxjb252ZXJ0ID0gUEdMQ19sb2NhbGVjb252KCk7 CiAKKwlpZiAobGNvbnZlcnQgPT0gTlVMTCkKKwkJZXJldHVybihmY2luZm8tPmNvbnRleHQsIChE YXR1bSkgMCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJt c2coImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGxvY2FsZSBpbmZvcm1hdGlvbiIpKSk7 CisKIAkvKiBzZWUgY29tbWVudHMgYWJvdXQgZnJhY19kaWdpdHMgaW4gY2FzaF9pbigpICovCiAJ ZnBvaW50ID0gbGNvbnZlcnQtPmZyYWNfZGlnaXRzOwogCWlmIChmcG9pbnQgPCAwIHx8IGZwb2lu dCA+IDEwKQpAQCAtMTE1OCw2ICsxMTgzLDEwIEBAIGludDhfY2FzaChQR19GVU5DVElPTl9BUkdT KQogCWludAkJCWk7CiAJc3RydWN0IGxjb252ICpsY29udmVydCA9IFBHTENfbG9jYWxlY29udigp OwogCisJZXJldHVybihmY2luZm8tPmNvbnRleHQsIChEYXR1bSkgMCwKKwkJCShlcnJjb2RlKEVS UkNPREVfT1VUX09GX01FTU9SWSksCisJCQkgZXJybXNnKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVt b3J5IGZvciBsb2NhbGUgaW5mb3JtYXRpb24iKSkpOworCiAJLyogc2VlIGNvbW1lbnRzIGFib3V0 IGZyYWNfZGlnaXRzIGluIGNhc2hfaW4oKSAqLwogCWZwb2ludCA9IGxjb252ZXJ0LT5mcmFjX2Rp Z2l0czsKIAlpZiAoZnBvaW50IDwgMCB8fCBmcG9pbnQgPiAxMCkKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9y bWF0dGluZy5jCmluZGV4IGU2MjQ2ZGM0NGIuLmI0MjI5ZDA3NWUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Zvcm1hdHRpbmcuYwpAQCAtNTA2NywxMiArNTA2NywxMiBAQCBOVU1fcHJlcGFyZV9sb2NhbGUo TlVNUHJvYyAqTnApCiAJCS8qCiAJCSAqIFBvc2l0aXZlIC8gTmVnYXRpdmUgbnVtYmVyIHNpZ24K IAkJICovCi0JCWlmIChsY29udi0+bmVnYXRpdmVfc2lnbiAmJiAqbGNvbnYtPm5lZ2F0aXZlX3Np Z24pCisJCWlmIChsY29udiAmJiBsY29udi0+bmVnYXRpdmVfc2lnbiAmJiAqbGNvbnYtPm5lZ2F0 aXZlX3NpZ24pCiAJCQlOcC0+TF9uZWdhdGl2ZV9zaWduID0gbGNvbnYtPm5lZ2F0aXZlX3NpZ247 CiAJCWVsc2UKIAkJCU5wLT5MX25lZ2F0aXZlX3NpZ24gPSAiLSI7CiAKLQkJaWYgKGxjb252LT5w b3NpdGl2ZV9zaWduICYmICpsY29udi0+cG9zaXRpdmVfc2lnbikKKwkJaWYgKGxjb252ICYmIGxj b252LT5wb3NpdGl2ZV9zaWduICYmICpsY29udi0+cG9zaXRpdmVfc2lnbikKIAkJCU5wLT5MX3Bv c2l0aXZlX3NpZ24gPSBsY29udi0+cG9zaXRpdmVfc2lnbjsKIAkJZWxzZQogCQkJTnAtPkxfcG9z aXRpdmVfc2lnbiA9ICIrIjsKQEAgLTUwODAsOSArNTA4MCw4IEBAIE5VTV9wcmVwYXJlX2xvY2Fs ZShOVU1Qcm9jICpOcCkKIAkJLyoKIAkJICogTnVtYmVyIGRlY2ltYWwgcG9pbnQKIAkJICovCi0J CWlmIChsY29udi0+ZGVjaW1hbF9wb2ludCAmJiAqbGNvbnYtPmRlY2ltYWxfcG9pbnQpCisJCWlm IChsY29udiAmJiBsY29udi0+ZGVjaW1hbF9wb2ludCAmJiAqbGNvbnYtPmRlY2ltYWxfcG9pbnQp CiAJCQlOcC0+ZGVjaW1hbCA9IGxjb252LT5kZWNpbWFsX3BvaW50OwotCiAJCWVsc2UKIAkJCU5w LT5kZWNpbWFsID0gIi4iOwogCkBAIC01MDk2LDcgKzUwOTUsNyBAQCBOVU1fcHJlcGFyZV9sb2Nh bGUoTlVNUHJvYyAqTnApCiAJCSAqIGJ1dCAiIiBmb3IgdGhvdXNhbmRzX3NlcCwgc28gd2Ugc2V0 IHRoZSB0aG91c2FuZHNfc2VwIHRvby4KIAkJICogaHR0cDovL2FyY2hpdmVzLnBvc3RncmVzcWwu b3JnL3Bnc3FsLWhhY2tlcnMvMjAwNy0xMS9tc2cwMDc3Mi5waHAKIAkJICovCi0JCWlmIChsY29u di0+dGhvdXNhbmRzX3NlcCAmJiAqbGNvbnYtPnRob3VzYW5kc19zZXApCisJCWlmIChsY29udiAm JiBsY29udi0+dGhvdXNhbmRzX3NlcCAmJiAqbGNvbnYtPnRob3VzYW5kc19zZXApCiAJCQlOcC0+ TF90aG91c2FuZHNfc2VwID0gbGNvbnYtPnRob3VzYW5kc19zZXA7CiAJCS8qIE1ha2Ugc3VyZSB0 aG91c2FuZHMgc2VwYXJhdG9yIGRvZXNuJ3QgbWF0Y2ggZGVjaW1hbCBwb2ludCBzeW1ib2wuICov CiAJCWVsc2UgaWYgKHN0cmNtcChOcC0+ZGVjaW1hbCwgIiwiKSAhPSAwKQpAQCAtNTEwNyw3ICs1 MTA2LDcgQEAgTlVNX3ByZXBhcmVfbG9jYWxlKE5VTVByb2MgKk5wKQogCQkvKgogCQkgKiBDdXJy ZW5jeSBzeW1ib2wKIAkJICovCi0JCWlmIChsY29udi0+Y3VycmVuY3lfc3ltYm9sICYmICpsY29u di0+Y3VycmVuY3lfc3ltYm9sKQorCQlpZiAobGNvbnYgJiYgbGNvbnYtPmN1cnJlbmN5X3N5bWJv bCAmJiAqbGNvbnYtPmN1cnJlbmN5X3N5bWJvbCkKIAkJCU5wLT5MX2N1cnJlbmN5X3N5bWJvbCA9 IGxjb252LT5jdXJyZW5jeV9zeW1ib2w7CiAJCWVsc2UKIAkJCU5wLT5MX2N1cnJlbmN5X3N5bWJv bCA9ICIgIjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCBiNDU1ZWYzYWZmLi45YjVk NDM4NGM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC05OCw2ICs5OCwyMSBAQCBj aGFyCSAgICpsb2NhbGVfdGltZTsKIAogaW50CQkJaWN1X3ZhbGlkYXRpb25fbGV2ZWwgPSBXQVJO SU5HOwogCisvKgorICogQ3VycmVudCBsb2NhbGUgc2V0dGluZ3MKKyAqCisgKiB1c2Vsb2NhbGUo KSBhbmQgZnJpZW5kcyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgdG8gc2V0bG9jYWxlKGNhdCwg TlVMTCksIHNvCisgKiBhcyB3ZSBzZXQgbG9jYWxlcyBmb3IgdmFyaW91cyBjYXRlZ29yaWVzLCBz dGFzaCB0aGVtIGZvciByZXRyaWV2YWwgYXMgbmVlZGVkLgorICovCitzdGF0aWMgc3RydWN0IHsK KwljaGFyICpjb2xsYXRlOworCWNoYXIgKmN0eXBlOworCWNoYXIgKm1lc3NhZ2VzOworCWNoYXIg Km1vbmV0YXJ5OworCWNoYXIgKm51bWVyaWM7CisJY2hhciAqdGltZTsKK30gY3Vycl9sb2NhbGVz ID0geyAwIH07CisKIC8qCiAgKiBsY190aW1lIGxvY2FsaXphdGlvbiBjYWNoZS4KICAqCkBAIC0x NjksNTAgKzE4NCwxNDMgQEAgbG9jYWxlX2lzX2MoY29uc3QgY2hhciAqbG9jYWxlLCBib29sIGln bm9yZV9jYXNlKQogCXJldHVybiBwZ19zdHJjYXNlY21wKGxvY2FsZSwgIkMiKSA9PSAwIHx8IHBn X3N0cmNhc2VjbXAobG9jYWxlLCAiUE9TSVgiKSA9PSAwOwogfQogCisKIC8qCi0gKiBwZ19wZXJt X3NldGxvY2FsZQotICoKLSAqIFRoaXMgd3JhcHMgdGhlIGxpYmMgZnVuY3Rpb24gc2V0bG9jYWxl KCksIHdpdGggdHdvIGFkZGl0aW9ucy4gIEZpcnN0LCB3aGVuCi0gKiBjaGFuZ2luZyBMQ19DVFlQ RSwgdXBkYXRlIGdldHRleHQncyBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgbWVzc2FnZQotICog ZG9tYWluLiAgR05VIGdldHRleHQgYXV0b21hdGljYWxseSB0cmFja3MgTENfQ1RZUEUgb24gbW9z dCBwbGF0Zm9ybXMsIGJ1dAotICogbm90IG9uIFdpbmRvd3MuICBTZWNvbmQsIGlmIHRoZSBvcGVy YXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGNvcnJlc3BvbmRpbmcKLSAqIExDX1hYWCBlbnZpcm9u bWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gbWF0Y2guICBCeSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVu dAotICogdmFyaWFibGUsIHdlIGVuc3VyZSB0aGF0IGFueSBzdWJzZXF1ZW50IHVzZSBvZiBzZXRs b2NhbGUoLi4uLCAiIikgd2lsbAotICogcHJlc2VydmUgdGhlIHNldHRpbmdzIG1hZGUgdGhyb3Vn aCB0aGlzIHJvdXRpbmUuICBPZiBjb3Vyc2UsIExDX0FMTCBtdXN0Ci0gKiBhbHNvIGJlIHVuc2V0 IHRvIGZ1bGx5IGVuc3VyZSB0aGF0LCBidXQgdGhhdCBoYXMgdG8gYmUgZG9uZSBlbHNld2hlcmUg YWZ0ZXIKLSAqIGFsbCB0aGUgaW5kaXZpZHVhbCBMQ19YWFggdmFyaWFibGVzIGhhdmUgYmVlbiBz ZXQgY29ycmVjdGx5LiAgKFRoYW5rIHlvdQotICogUGVybCBmb3IgbWFraW5nIHRoaXMga2x1Z2Ug bmVjZXNzYXJ5LikKKyAqIFR1cm5zIGxvY2FsZSBjYXRlZ29yaWVzIGludG8gdGhlaXIgbWFzayBl cXVpdmFsZW50cyBmb3IgdXNlIGluIG5ld2xvY2FsZSgzKQorICoKKyAqIEdDQyBoYXMgdGhlIG1h c2tzIGRlZmluZWQgYXMgKDEgPDwgY2F0ZWdvcnkpLCBidXQgdGhpcyBpc24ndCBndWFyYW50ZWVk IHRvIGJlCisgKiB0aGUgc2FtZSBpbiBvdGhlciBsaWJjcy4KKyAqLworc3RhdGljIGludAorY2F0 ZWdvcnlfdG9fbWFzayhpbnQgY2F0ZWdvcnkpCit7CisJc3dpdGNoIChjYXRlZ29yeSkgeworCWNh c2UgTENfQUxMOgorCQlyZXR1cm4gTENfQUxMX01BU0s7CisJY2FzZSBMQ19DT0xMQVRFOgorCQly ZXR1cm4gTENfQ09MTEFURV9NQVNLOworCWNhc2UgTENfQ1RZUEU6CisJCXJldHVybiBMQ19DVFlQ RV9NQVNLOworI2lmZGVmIExDX01FU1NBR0VTCisJY2FzZSBMQ19NRVNTQUdFUzoKKwkJcmV0dXJu IExDX01FU1NBR0VTX01BU0s7CisjZW5kaWYKKwljYXNlIExDX01PTkVUQVJZOgorCQlyZXR1cm4g TENfTU9ORVRBUllfTUFTSzsKKwljYXNlIExDX05VTUVSSUM6CisJCXJldHVybiBMQ19OVU1FUklD X01BU0s7CisJY2FzZSBMQ19USU1FOgorCQlyZXR1cm4gTENfVElNRV9NQVNLOworCX0KKworCXBn X3VucmVhY2hhYmxlKCk7Cit9CisKKworc3RhdGljIGNoYXIgKgorcGdfZ2V0bG9jYWxlKGludCBj YXRlZ29yeSkKK3sKKwlzd2l0Y2ggKGNhdGVnb3J5KSB7CisJY2FzZSBMQ19DT0xMQVRFOgorCQly ZXR1cm4gY3Vycl9sb2NhbGVzLmNvbGxhdGU7CisJY2FzZSBMQ19DVFlQRToKKwkJcmV0dXJuIGN1 cnJfbG9jYWxlcy5jdHlwZTsKKwljYXNlIExDX01FU1NBR0VTOgorCQlyZXR1cm4gY3Vycl9sb2Nh bGVzLm1lc3NhZ2VzOworCWNhc2UgTENfTU9ORVRBUlk6CisJCXJldHVybiBjdXJyX2xvY2FsZXMu bW9uZXRhcnk7CisJY2FzZSBMQ19OVU1FUklDOgorCQlyZXR1cm4gY3Vycl9sb2NhbGVzLm51bWVy aWM7CisJY2FzZSBMQ19USU1FOgorCQlyZXR1cm4gY3Vycl9sb2NhbGVzLnRpbWU7CisJZGVmYXVs dDoKKwkJcGdfdW5yZWFjaGFibGUoKTsKKwl9Cit9CisKKworLyoKKyAqIHBnX3NldGxvY2FsZQor ICoKKyAqIFRoaXMgd3JhcHMgdGhlIGxpYmMgZnVuY3Rpb24gdXNlbG9jYWxlKCksIHdpdGggYSBz aW5nbGUgYWRkaXRpb24uICBXaGVuCisgKiBjaGFuZ2luZyBMQ19DVFlQRSwgdXBkYXRlIGdldHRl eHQncyBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgbWVzc2FnZSBkb21haW4uCisgKiBHTlUgZ2V0 dGV4dCBhdXRvbWF0aWNhbGx5IHRyYWNrcyBMQ19DVFlQRSBvbiBtb3N0IHBsYXRmb3JtcywgYnV0 IG5vdCBvbgorICogV2luZG93cy4gIFRoaXMgZnVuY3Rpb24gZG9lcyB3aWxsIGFib3J0IGlmIGxv Y2FsZSBpcyB0aGUgZW1wdHkgc3RyaW5nLiAgQQorICogd29ya2Fyb3VuZCBpcyB0byBwYXNzIHRo ZSBvdXRwdXQgb2Ygc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgdG8gdGhlIGxvY2FsZQorICogYXJn dW1lbnQuCiAgKi8KIGNoYXIgKgotcGdfcGVybV9zZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25z dCBjaGFyICpsb2NhbGUpCitwZ19zZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICps b2NhbGUpCiB7Ci0JY2hhcgkgICAqcmVzdWx0OwotCWNvbnN0IGNoYXIgKmVudnZhcjsKKwljaGFy CSAgICpkdXA7CisJY2hhcgkgICoqc2F2ZTsKKwlpbnQJCQljYXRlZ29yeV9tYXNrOworCWxvY2Fs ZV90CXByZXZfbG9jYWxlOworCWxvY2FsZV90CXRlbXBfbG9jYWxlOworCWxvY2FsZV90CXdvcmtf bG9jYWxlOwogCi0jaWZuZGVmIFdJTjMyCi0JcmVzdWx0ID0gc2V0bG9jYWxlKGNhdGVnb3J5LCBs b2NhbGUpOwotI2Vsc2UKKwlpZiAobG9jYWxlID09IE5VTEwpCisJCXJldHVybiBwZ19nZXRsb2Nh bGUoY2F0ZWdvcnkpOworCisJQXNzZXJ0KGxvY2FsZVswXSAhPSAnXDAnKTsKKworCWNhdGVnb3J5 X21hc2sgPSBjYXRlZ29yeV90b19tYXNrKGNhdGVnb3J5KTsKKworCXByZXZfbG9jYWxlID0gdXNl bG9jYWxlKChsb2NhbGVfdCkgMCk7CisJQXNzZXJ0KHNhdmVkX2xvY2FsZSAhPSAobG9jYWxlX3Qp IDApOworCisJZHVwID0gc3RyZHVwKGxvY2FsZSk7CisJd29ya19sb2NhbGUgPSBkdXBsb2NhbGUo cHJldl9sb2NhbGUpOworCWlmICghZHVwIHx8IHdvcmtfbG9jYWxlID09IChsb2NhbGVfdCkgMCkg eworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSks CisJCQkJIGVycm1zZygib3V0IG9mIG1lbW9yeSIpKSk7CisKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJdGVtcF9sb2NhbGUgPSBuZXdsb2NhbGUoY2F0ZWdvcnlfbWFzaywgbG9jYWxlLCB3b3JrX2xv Y2FsZSk7CisJaWYgKHRlbXBfbG9jYWxlID09IChsb2NhbGVfdCkgMCkgeworCQlmcmVlbG9jYWxl KHdvcmtfbG9jYWxlKTsKKworCQlyZXR1cm4gTlVMTDsJCQkvKiBmYWxsIG91dCBpbW1lZGlhdGVs eSBvbiBmYWlsdXJlICovCisJfQorCXdvcmtfbG9jYWxlID0gdGVtcF9sb2NhbGU7CisKKwl1c2Vs b2NhbGUod29ya19sb2NhbGUpOworCWlmIChwcmV2X2xvY2FsZSAhPSBMQ19HTE9CQUxfTE9DQUxF KQorCQlmcmVlbG9jYWxlKHByZXZfbG9jYWxlKTsKIAogCS8qCi0JICogT24gV2luZG93cywgc2V0 bG9jYWxlKExDX01FU1NBR0VTKSBkb2VzIG5vdCB3b3JrLCBzbyBqdXN0IGFzc3VtZSB0aGF0Ci0J ICogdGhlIGdpdmVuIHZhbHVlIGlzIGdvb2QgYW5kIHNldCBpdCBpbiB0aGUgZW52aXJvbm1lbnQg dmFyaWFibGVzLiBXZQotCSAqIG11c3QgaWdub3JlIGF0dGVtcHRzIHRvIHNldCB0byAiIiwgd2hp Y2ggbWVhbnMgImtlZXAgdXNpbmcgdGhlIG9sZAotCSAqIGVudmlyb25tZW50IHZhbHVlIi4KKwkg KiBDb3B5aW5nIHRoZSBsb2NhbGUgbXVzdCBvY2N1ciBiZWZvcmUgd2UgcG90ZW50aWFsbHkgYmlu ZCB0aGUgdGV4dCBkb21haW4uCiAJICovCi0jaWZkZWYgTENfTUVTU0FHRVMKLQlpZiAoY2F0ZWdv cnkgPT0gTENfTUVTU0FHRVMpCi0JewotCQlyZXN1bHQgPSAoY2hhciAqKSBsb2NhbGU7Ci0JCWlm IChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKLQkJCXJldHVybiByZXN1bHQ7 CisJc3dpdGNoIChjYXRlZ29yeSkgeworCWNhc2UgTENfQ09MTEFURToKKwkJc2F2ZSA9ICZjdXJy X2xvY2FsZXMuY29sbGF0ZTsKKwkJYnJlYWs7CisJY2FzZSBMQ19DVFlQRToKKwkJc2F2ZSA9ICZj dXJyX2xvY2FsZXMuY3R5cGU7CisJCWJyZWFrOworCWNhc2UgTENfTUVTU0FHRVM6CisJCXNhdmUg PSAmY3Vycl9sb2NhbGVzLm1lc3NhZ2VzOworCQlicmVhazsKKwljYXNlIExDX01PTkVUQVJZOgor CQlzYXZlID0gJmN1cnJfbG9jYWxlcy5tb25ldGFyeTsKKwkJYnJlYWs7CisJY2FzZSBMQ19OVU1F UklDOgorCQlzYXZlID0gJmN1cnJfbG9jYWxlcy5udW1lcmljOworCQlicmVhazsKKwljYXNlIExD X1RJTUU6CisJCXNhdmUgPSAmY3Vycl9sb2NhbGVzLnRpbWU7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCXBnX3VucmVhY2hhYmxlKCk7CiAJfQotCWVsc2UKLSNlbmRpZgotCQlyZXN1bHQgPSBzZXRs b2NhbGUoY2F0ZWdvcnksIGxvY2FsZSk7Ci0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAotCWlm IChyZXN1bHQgPT0gTlVMTCkKLQkJcmV0dXJuIHJlc3VsdDsJCQkvKiBmYWxsIG91dCBpbW1lZGlh dGVseSBvbiBmYWlsdXJlICovCisJLyogRnJlZSBvbGQgbG9jYWxlIHN0cmluZywgYW5kIHN0YXNo IHRoZSBuZXcgb25lICovCisJZnJlZSgqc2F2ZSk7CisJKnNhdmUgPSBkdXA7CisJZHVwID0gTlVM TDsKIAogCS8qCiAJICogVXNlIHRoZSByaWdodCBlbmNvZGluZyBpbiB0cmFuc2xhdGVkIG1lc3Nh Z2VzLiAgVW5kZXIgRU5BQkxFX05MUywgbGV0CkBAIC0yMjMsMTIgKzMzMSw2IEBAIHBnX3Blcm1f c2V0bG9jYWxlKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKQogCSAqLwogCWlmIChj YXRlZ29yeSA9PSBMQ19DVFlQRSkKIAl7Ci0JCXN0YXRpYyBjaGFyIHNhdmVfbGNfY3R5cGVbTE9D QUxFX05BTUVfQlVGTEVOXTsKLQotCQkvKiBjb3B5IHNldGxvY2FsZSgpIHJldHVybiB2YWx1ZSBi ZWZvcmUgY2FsbGVlIGludm9rZXMgaXQgYWdhaW4gKi8KLQkJc3RybGNweShzYXZlX2xjX2N0eXBl LCByZXN1bHQsIHNpemVvZihzYXZlX2xjX2N0eXBlKSk7Ci0JCXJlc3VsdCA9IHNhdmVfbGNfY3R5 cGU7Ci0KICNpZmRlZiBFTkFCTEVfTkxTCiAJCVNldE1lc3NhZ2VFbmNvZGluZyhwZ19iaW5kX3Rl eHRkb21haW5fY29kZXNldCh0ZXh0ZG9tYWluKE5VTEwpKSk7CiAjZWxzZQpAQCAtMjM2LDQzICsz MzgsNyBAQCBwZ19wZXJtX3NldGxvY2FsZShpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxvY2Fs ZSkKICNlbmRpZgogCX0KIAotCXN3aXRjaCAoY2F0ZWdvcnkpCi0JewotCQljYXNlIExDX0NPTExB VEU6Ci0JCQllbnZ2YXIgPSAiTENfQ09MTEFURSI7Ci0JCQlicmVhazsKLQkJY2FzZSBMQ19DVFlQ RToKLQkJCWVudnZhciA9ICJMQ19DVFlQRSI7Ci0JCQlicmVhazsKLSNpZmRlZiBMQ19NRVNTQUdF UwotCQljYXNlIExDX01FU1NBR0VTOgotCQkJZW52dmFyID0gIkxDX01FU1NBR0VTIjsKLSNpZmRl ZiBXSU4zMgotCQkJcmVzdWx0ID0gSXNvTG9jYWxlTmFtZShsb2NhbGUpOwotCQkJaWYgKHJlc3Vs dCA9PSBOVUxMKQotCQkJCXJlc3VsdCA9IChjaGFyICopIGxvY2FsZTsKLQkJCWVsb2coREVCVUcz LCAiSXNvTG9jYWxlTmFtZSgpIGV4ZWN1dGVkOyBsb2NhbGU6IFwiJXNcIiIsIHJlc3VsdCk7Ci0j ZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KLQkJCWJyZWFrOwotI2VuZGlmCQkJCQkJCS8qIExDX01F U1NBR0VTICovCi0JCWNhc2UgTENfTU9ORVRBUlk6Ci0JCQllbnZ2YXIgPSAiTENfTU9ORVRBUlki OwotCQkJYnJlYWs7Ci0JCWNhc2UgTENfTlVNRVJJQzoKLQkJCWVudnZhciA9ICJMQ19OVU1FUklD IjsKLQkJCWJyZWFrOwotCQljYXNlIExDX1RJTUU6Ci0JCQllbnZ2YXIgPSAiTENfVElNRSI7Ci0J CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVsb2coRkFUQUwsICJ1bnJlY29nbml6ZWQgTEMgY2F0 ZWdvcnk6ICVkIiwgY2F0ZWdvcnkpOwotCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNvbXBpbGVy IHF1aWV0ICovCi0JfQotCi0JaWYgKHNldGVudihlbnZ2YXIsIHJlc3VsdCwgMSkgIT0gMCkKLQkJ cmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAqc2F2ZTsKIH0KIAogCkBA IC0yODksMzIgKzM1NSw0MyBAQCBwZ19wZXJtX3NldGxvY2FsZShpbnQgY2F0ZWdvcnksIGNvbnN0 IGNoYXIgKmxvY2FsZSkKIGJvb2wKIGNoZWNrX2xvY2FsZShpbnQgY2F0ZWdvcnksIGNvbnN0IGNo YXIgKmxvY2FsZSwgY2hhciAqKmNhbm9ubmFtZSkKIHsKLQljaGFyCSAgICpzYXZlOwotCWNoYXIJ ICAgKnJlczsKKwlsb2NhbGVfdAlzYXZlZF9sb2NhbGU7CisJbG9jYWxlX3QJdGVtcF9sb2NhbGU7 CisJbG9jYWxlX3QJd29ya19sb2NhbGU7CisJaW50CQkJY2F0ZWdvcnlfbWFzazsKKworCWNhdGVn b3J5X21hc2sgPSBjYXRlZ29yeV90b19tYXNrKGNhdGVnb3J5KTsKIAogCWlmIChjYW5vbm5hbWUp CiAJCSpjYW5vbm5hbWUgPSBOVUxMOwkJLyogaW4gY2FzZSBvZiBmYWlsdXJlICovCiAKLQlzYXZl ID0gc2V0bG9jYWxlKGNhdGVnb3J5LCBOVUxMKTsKLQlpZiAoIXNhdmUpCi0JCXJldHVybiBmYWxz ZTsJCQkvKiB3b24ndCBoYXBwZW4sIHdlIGhvcGUgKi8KKwlzYXZlZF9sb2NhbGUgPSB1c2Vsb2Nh bGUoKGxvY2FsZV90KSAwKTsKKwl3b3JrX2xvY2FsZSA9IGR1cGxvY2FsZShzYXZlZF9sb2NhbGUp OworCWlmICh3b3JrX2xvY2FsZSA9PSAobG9jYWxlX3QpIDApIHsKKwkJaWYgKGVycm5vID09IEVO T01FTSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01F TU9SWSksCisJCQkJCSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSkpOworCisJCXJldHVybiBmYWxz ZTsKKwl9CiAKLQkvKiBzYXZlIG1heSBiZSBwb2ludGluZyBhdCBhIG1vZGlmaWFibGUgc2NyYXRj aCB2YXJpYWJsZSwgc2VlIGFib3ZlLiAqLwotCXNhdmUgPSBwc3RyZHVwKHNhdmUpOworCXRlbXBf bG9jYWxlID0gbmV3bG9jYWxlKGNhdGVnb3J5X21hc2ssIGxvY2FsZSwgd29ya19sb2NhbGUpOwor CWlmICh0ZW1wX2xvY2FsZSA9PSAobG9jYWxlX3QpIDApIHsKKwkJZnJlZWxvY2FsZSh3b3JrX2xv Y2FsZSk7CiAKLQkvKiBzZXQgdGhlIGxvY2FsZSB3aXRoIHNldGxvY2FsZSwgdG8gc2VlIGlmIGl0 IGFjY2VwdHMgaXQuICovCi0JcmVzID0gc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2NhbGUpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCXdvcmtfbG9jYWxlID0gdGVtcF9sb2NhbGU7CiAKLQkvKiBzYXZl IGNhbm9uaWNhbCBuYW1lIGlmIHJlcXVlc3RlZC4gKi8KLQlpZiAocmVzICYmIGNhbm9ubmFtZSkK LQkJKmNhbm9ubmFtZSA9IHBzdHJkdXAocmVzKTsKKwl1c2Vsb2NhbGUod29ya19sb2NhbGUpOwor CWlmIChjYW5vbm5hbWUpCisJCSpjYW5vbm5hbWUgPSBwc3RyZHVwKGxvY2FsZSk7IC8qIFRPRE86 IFRoaXMgZG9lcyBub3QgaGFuZGxlICIiIGFzIHRoZSBsb2NhbGUgKi8KIAotCS8qIHJlc3RvcmUg b2xkIHZhbHVlLiAqLwotCWlmICghc2V0bG9jYWxlKGNhdGVnb3J5LCBzYXZlKSkKLQkJZWxvZyhX QVJOSU5HLCAiZmFpbGVkIHRvIHJlc3RvcmUgb2xkIGxvY2FsZSBcIiVzXCIiLCBzYXZlKTsKLQlw ZnJlZShzYXZlKTsKKwl1c2Vsb2NhbGUoc2F2ZWRfbG9jYWxlKTsKKwlmcmVlbG9jYWxlKHdvcmtf bG9jYWxlKTsKIAotCXJldHVybiAocmVzICE9IE5VTEwpOworCXJldHVybiB0cnVlOwogfQogCiAK QEAgLTMyNyw3ICs0MDQsNyBAQCBjaGVja19sb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFy ICpsb2NhbGUsIGNoYXIgKipjYW5vbm5hbWUpCiAgKgogICogTm90ZTogd2UgYWNjZXB0IHZhbHVl ID0gIiIgYXMgc2VsZWN0aW5nIHRoZSBwb3N0bWFzdGVyJ3MgZW52aXJvbm1lbnQKICAqIHZhbHVl LCB3aGF0ZXZlciBpdCB3YXMgKHNvIGxvbmcgYXMgdGhlIGVudmlyb25tZW50IHNldHRpbmcgaXMg bGVnYWwpLgotICogVGhpcyB3aWxsIGhhdmUgYmVlbiBsb2NrZWQgZG93biBieSBhbiBlYXJsaWVy IGNhbGwgdG8gcGdfcGVybV9zZXRsb2NhbGUuCisgKiBUaGlzIHdpbGwgaGF2ZSBiZWVuIGxvY2tl ZCBkb3duIGJ5IGFuIGVhcmxpZXIgY2FsbCB0byBwZ19zZXRsb2NhbGUuCiAgKi8KIGJvb2wKIGNo ZWNrX2xvY2FsZV9tb25ldGFyeShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJj ZSBzb3VyY2UpCkBAIC00MDYsNyArNDgzLDcgQEAgYXNzaWduX2xvY2FsZV9tZXNzYWdlcyhjb25z dCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4dHJhKQogCSAqIFdlIGlnbm9yZSBmYWlsdXJlLCBhcyBw ZXIgY29tbWVudCBhYm92ZS4KIAkgKi8KICNpZmRlZiBMQ19NRVNTQUdFUwotCSh2b2lkKSBwZ19w ZXJtX3NldGxvY2FsZShMQ19NRVNTQUdFUywgbmV3dmFsKTsKKwkodm9pZCkgcGdfc2V0bG9jYWxl KExDX01FU1NBR0VTLCBuZXd2YWwpOwogI2VuZGlmCiB9CiAKQEAgLTUwMiwxMSArNTc5LDggQEAg UEdMQ19sb2NhbGVjb252KHZvaWQpCiAJc3RhdGljIGJvb2wgQ3VycmVudExvY2FsZUNvbnZBbGxv Y2F0ZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgbGNvbnYgKmV4dGxjb252OwogCXN0cnVjdCBsY29udiB3 b3JrbGNvbnY7Ci0JY2hhcgkgICAqc2F2ZV9sY19tb25ldGFyeTsKLQljaGFyCSAgICpzYXZlX2xj X251bWVyaWM7Ci0jaWZkZWYgV0lOMzIKLQljaGFyCSAgICpzYXZlX2xjX2N0eXBlOwotI2VuZGlm CisJbG9jYWxlX3QJc2F2ZWRfbG9jYWxlOworCWxvY2FsZV90CXdvcmtfbG9jYWxlOwogCiAJLyog RGlkIHdlIGRvIGl0IGFscmVhZHk/ICovCiAJaWYgKEN1cnJlbnRMb2NhbGVDb252VmFsaWQpCkBA IC01MzMsMTYgKzYwNywxNSBAQCBQR0xDX2xvY2FsZWNvbnYodm9pZCkKIAkgKi8KIAltZW1zZXQo JndvcmtsY29udiwgMCwgc2l6ZW9mKHdvcmtsY29udikpOwogCi0JLyogU2F2ZSBwcmV2YWlsaW5n IHZhbHVlcyBvZiBtb25ldGFyeSBhbmQgbnVtZXJpYyBsb2NhbGVzICovCi0Jc2F2ZV9sY19tb25l dGFyeSA9IHNldGxvY2FsZShMQ19NT05FVEFSWSwgTlVMTCk7Ci0JaWYgKCFzYXZlX2xjX21vbmV0 YXJ5KQotCQllbG9nKEVSUk9SLCAic2V0bG9jYWxlKE5VTEwpIGZhaWxlZCIpOwotCXNhdmVfbGNf bW9uZXRhcnkgPSBwc3RyZHVwKHNhdmVfbGNfbW9uZXRhcnkpOworCS8qIFNhdmUgcHJldmFpbGlu ZyBsb2NhbGUgKi8KKwlzYXZlZF9sb2NhbGUgPSB1c2Vsb2NhbGUoKGxvY2FsZV90KSAwKTsKKwlB c3NlcnQoc2F2ZWRfbG9jYWxlICE9IChsb2NhbGVfdCkgMCk7CiAKLQlzYXZlX2xjX251bWVyaWMg PSBzZXRsb2NhbGUoTENfTlVNRVJJQywgTlVMTCk7Ci0JaWYgKCFzYXZlX2xjX251bWVyaWMpCi0J CWVsb2coRVJST1IsICJzZXRsb2NhbGUoTlVMTCkgZmFpbGVkIik7Ci0Jc2F2ZV9sY19udW1lcmlj ID0gcHN0cmR1cChzYXZlX2xjX251bWVyaWMpOworCXdvcmtfbG9jYWxlID0gZHVwbG9jYWxlKHNh dmVkX2xvY2FsZSk7CisJaWYgKHdvcmtfbG9jYWxlID09IChsb2NhbGVfdCkgMCkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJt c2coIm91dCBvZiBtZW1vcnkiKSkpOwogCiAjaWZkZWYgV0lOMzIKIApAQCAtNTYwLDM3ICs2MzMs MzcgQEAgUEdMQ19sb2NhbGVjb252KHZvaWQpCiAJICogcmVzdWx0cy4gIEhlbmNlLCB3ZSBtdXN0 IHRlbXBvcmFyaWx5IHNldCB0aGF0IGNhdGVnb3J5IGFzIHdlbGwuCiAJICovCiAKLQkvKiBTYXZl IHByZXZhaWxpbmcgdmFsdWUgb2YgY3R5cGUgbG9jYWxlICovCi0Jc2F2ZV9sY19jdHlwZSA9IHNl dGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7Ci0JaWYgKCFzYXZlX2xjX2N0eXBlKQotCQllbG9nKEVS Uk9SLCAic2V0bG9jYWxlKE5VTEwpIGZhaWxlZCIpOwotCXNhdmVfbGNfY3R5cGUgPSBwc3RyZHVw KHNhdmVfbGNfY3R5cGUpOwotCiAJLyogSGVyZSBiZWdpbnMgdGhlIGNyaXRpY2FsIHNlY3Rpb24g d2hlcmUgd2UgbXVzdCBub3QgdGhyb3cgZXJyb3IgKi8KIAogCS8qIHVzZSBudW1lcmljIHRvIHNl dCB0aGUgY3R5cGUgKi8KLQlzZXRsb2NhbGUoTENfQ1RZUEUsIGxvY2FsZV9udW1lcmljKTsKKwl3 b3JrX2xvY2FsZSA9IG5ld2xvY2FsZShMQ19DVFlQRV9NQVNLLCBsb2NhbGVfbnVtZXJpYywgd29y a19sb2NhbGUpOworCUFzc2VydCh3b3JrX2xvY2FsZSAhPSAobG9jYWxlX3QpIDApOwogI2VuZGlm CiAKIAkvKiBHZXQgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBmb3IgbnVtZXJpYyAqLwotCXNldGxv Y2FsZShMQ19OVU1FUklDLCBsb2NhbGVfbnVtZXJpYyk7CisJd29ya19sb2NhbGUgPSBuZXdsb2Nh bGUoTENfTlVNRVJJQ19NQVNLLCBsb2NhbGVfbnVtZXJpYywgd29ya19sb2NhbGUpOworCUFzc2Vy dCh3b3JrX2xvY2FsZSAhPSAobG9jYWxlX3QpIDApOworCXVzZWxvY2FsZSh3b3JrX2xvY2FsZSk7 CiAJZXh0bGNvbnYgPSBsb2NhbGVjb252KCk7CiAKLQkvKiBNdXN0IGNvcHkgZGF0YSBub3cgaW4g Y2FzZSBzZXRsb2NhbGUoKSBvdmVyd3JpdGVzIGl0ICovCisJLyogTXVzdCBjb3B5IGRhdGEgbm93 IGluIGNhc2UgdXBkYXRpbmcgdGhlIGxvY2FsZSBvdmVyd3JpdGVzIGl0ICovCiAJd29ya2xjb252 LmRlY2ltYWxfcG9pbnQgPSBzdHJkdXAoZXh0bGNvbnYtPmRlY2ltYWxfcG9pbnQpOwogCXdvcmts Y29udi50aG91c2FuZHNfc2VwID0gc3RyZHVwKGV4dGxjb252LT50aG91c2FuZHNfc2VwKTsKIAl3 b3JrbGNvbnYuZ3JvdXBpbmcgPSBzdHJkdXAoZXh0bGNvbnYtPmdyb3VwaW5nKTsKIAogI2lmZGVm IFdJTjMyCiAJLyogdXNlIG1vbmV0YXJ5IHRvIHNldCB0aGUgY3R5cGUgKi8KLQlzZXRsb2NhbGUo TENfQ1RZUEUsIGxvY2FsZV9tb25ldGFyeSk7CisJd29ya19sb2NhbGUgPSBuZXdsb2NhbGUoTENf Q1RZUEVfTUFTSywgbG9jYWxlX21vbmV0YXJ5LCB3b3JrX2xvY2FsZSk7CisJQXNzZXJ0KHdvcmtf bG9jYWxlICE9IChsb2NhbGVfdCkgMCk7CiAjZW5kaWYKIAogCS8qIEdldCBmb3JtYXR0aW5nIGlu Zm9ybWF0aW9uIGZvciBtb25ldGFyeSAqLwotCXNldGxvY2FsZShMQ19NT05FVEFSWSwgbG9jYWxl X21vbmV0YXJ5KTsKKwl3b3JrX2xvY2FsZSA9IG5ld2xvY2FsZShMQ19NT05FVEFSWV9NQVNLLCBs b2NhbGVfbW9uZXRhcnksIHdvcmtfbG9jYWxlKTsKKwlBc3NlcnQod29ya19sb2NhbGUgIT0gKGxv Y2FsZV90KSAwKTsKKwl1c2Vsb2NhbGUod29ya19sb2NhbGUpOwogCWV4dGxjb252ID0gbG9jYWxl Y29udigpOwogCi0JLyogTXVzdCBjb3B5IGRhdGEgbm93IGluIGNhc2Ugc2V0bG9jYWxlKCkgb3Zl cndyaXRlcyBpdCAqLworCS8qIE11c3QgY29weSBkYXRhIG5vdyBpbiBjYXNlIHVwZGF0aW5nIHRo ZSBsb2NhbGUgb3ZlcndyaXRlcyBpdCAqLwogCXdvcmtsY29udi5pbnRfY3Vycl9zeW1ib2wgPSBz dHJkdXAoZXh0bGNvbnYtPmludF9jdXJyX3N5bWJvbCk7CiAJd29ya2xjb252LmN1cnJlbmN5X3N5 bWJvbCA9IHN0cmR1cChleHRsY29udi0+Y3VycmVuY3lfc3ltYm9sKTsKIAl3b3JrbGNvbnYubW9u X2RlY2ltYWxfcG9pbnQgPSBzdHJkdXAoZXh0bGNvbnYtPm1vbl9kZWNpbWFsX3BvaW50KTsKQEAg LTYwOCwyMiArNjgxLDkgQEAgUEdMQ19sb2NhbGVjb252KHZvaWQpCiAJd29ya2xjb252LnBfc2ln bl9wb3NuID0gZXh0bGNvbnYtPnBfc2lnbl9wb3NuOwogCXdvcmtsY29udi5uX3NpZ25fcG9zbiA9 IGV4dGxjb252LT5uX3NpZ25fcG9zbjsKIAotCS8qCi0JICogUmVzdG9yZSB0aGUgcHJldmFpbGlu ZyBsb2NhbGUgc2V0dGluZ3M7IGZhaWx1cmUgdG8gZG8gc28gaXMgZmF0YWwuCi0JICogUG9zc2li bHkgd2UgY291bGQgbGltcCBhbG9uZyB3aXRoIG5vbmRlZmF1bHQgTENfTU9ORVRBUlkgb3IgTENf TlVNRVJJQywKLQkgKiBidXQgcHJvY2VlZGluZyB3aXRoIHRoZSB3cm9uZyB2YWx1ZSBvZiBMQ19D VFlQRSB3b3VsZCBjZXJ0YWlubHkgYmUgYmFkCi0JICogbmV3czsgYW5kIGNvbnNpZGVyaW5nIHRo YXQgdGhlIHByZXZhaWxpbmcgTENfTU9ORVRBUlkgYW5kIExDX05VTUVSSUMKLQkgKiBhcmUgYWxt b3N0IGNlcnRhaW5seSAiQyIsIHRoZXJlJ3MgcmVhbGx5IG5vIHJlYXNvbiB0aGF0IHJlc3Rvcmlu ZyB0aG9zZQotCSAqIHNob3VsZCBmYWlsLgotCSAqLwotI2lmZGVmIFdJTjMyCi0JaWYgKCFzZXRs b2NhbGUoTENfQ1RZUEUsIHNhdmVfbGNfY3R5cGUpKQotCQllbG9nKEZBVEFMLCAiZmFpbGVkIHRv IHJlc3RvcmUgTENfQ1RZUEUgdG8gXCIlc1wiIiwgc2F2ZV9sY19jdHlwZSk7Ci0jZW5kaWYKLQlp ZiAoIXNldGxvY2FsZShMQ19NT05FVEFSWSwgc2F2ZV9sY19tb25ldGFyeSkpCi0JCWVsb2coRkFU QUwsICJmYWlsZWQgdG8gcmVzdG9yZSBMQ19NT05FVEFSWSB0byBcIiVzXCIiLCBzYXZlX2xjX21v bmV0YXJ5KTsKLQlpZiAoIXNldGxvY2FsZShMQ19OVU1FUklDLCBzYXZlX2xjX251bWVyaWMpKQot CQllbG9nKEZBVEFMLCAiZmFpbGVkIHRvIHJlc3RvcmUgTENfTlVNRVJJQyB0byBcIiVzXCIiLCBz YXZlX2xjX251bWVyaWMpOworCS8qIFJlc3RvcmUgdGhlIHByZXZhaWxpbmcgbG9jYWxlIHNldHRp bmdzOyBmYWlsdXJlIHRvIGRvIHNvIGlzIGZhdGFsLiAqLworCXVzZWxvY2FsZShzYXZlZF9sb2Nh bGUpOworCWZyZWVsb2NhbGUod29ya19sb2NhbGUpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50 IHdlJ3ZlIGRvbmUgb3VyIGJlc3QgdG8gY2xlYW4gdXAsIGFuZCBjYW4gY2FsbCBmdW5jdGlvbnMK QEAgLTYzNCwxMyArNjk0LDYgQEAgUEdMQ19sb2NhbGVjb252KHZvaWQpCiAJewogCQlpbnQJCQll bmNvZGluZzsKIAotCQkvKiBSZWxlYXNlIHRoZSBwc3RyZHVwJ2QgbG9jYWxlIG5hbWVzICovCi0J CXBmcmVlKHNhdmVfbGNfbW9uZXRhcnkpOwotCQlwZnJlZShzYXZlX2xjX251bWVyaWMpOwotI2lm ZGVmIFdJTjMyCi0JCXBmcmVlKHNhdmVfbGNfY3R5cGUpOwotI2VuZGlmCi0KIAkJLyogSWYgYW55 IG9mIHRoZSBwcmVjZWRpbmcgc3RyZHVwIGNhbGxzIGZhaWxlZCwgY29tcGxhaW4gbm93LiAqLwog CQlpZiAoIXN0cnVjdF9sY29udl9pc192YWxpZCgmd29ya2xjb252KSkKIAkJCWVyZXBvcnQoRVJS T1IsCkBAIC03ODcsMTAgKzg0MCw4IEBAIGNhY2hlX2xvY2FsZV90aW1lKHZvaWQpCiAJYm9vbAkJ c3RyZnRpbWVmYWlsID0gZmFsc2U7CiAJaW50CQkJZW5jb2Rpbmc7CiAJaW50CQkJaTsKLQljaGFy CSAgICpzYXZlX2xjX3RpbWU7Ci0jaWZkZWYgV0lOMzIKLQljaGFyCSAgICpzYXZlX2xjX2N0eXBl OwotI2VuZGlmCisJbG9jYWxlX3QJc2F2ZWRfbG9jYWxlOworCWxvY2FsZV90CXdvcmtfbG9jYWxl OwogCiAJLyogZGlkIHdlIGRvIHRoaXMgYWxyZWFkeT8gKi8KIAlpZiAoQ3VycmVudExDVGltZVZh bGlkKQpAQCAtODA1LDExICs4NTYsMTUgQEAgY2FjaGVfbG9jYWxlX3RpbWUodm9pZCkKIAkgKiBy ZXN1bHRzIGFmdGVyd2FyZHMuCiAJICovCiAKLQkvKiBTYXZlIHByZXZhaWxpbmcgdmFsdWUgb2Yg dGltZSBsb2NhbGUgKi8KLQlzYXZlX2xjX3RpbWUgPSBzZXRsb2NhbGUoTENfVElNRSwgTlVMTCk7 Ci0JaWYgKCFzYXZlX2xjX3RpbWUpCi0JCWVsb2coRVJST1IsICJzZXRsb2NhbGUoTlVMTCkgZmFp bGVkIik7Ci0Jc2F2ZV9sY190aW1lID0gcHN0cmR1cChzYXZlX2xjX3RpbWUpOworCS8qIFNhdmUg cHJldmFpbGluZyBsb2NhbGUgKi8KKwlzYXZlZF9sb2NhbGUgPSB1c2Vsb2NhbGUoKGxvY2FsZV90 KSAwKTsKKwlBc3NlcnQoc2F2ZWRfbG9jYWxlICE9IChsb2NhbGVfdCkgMCk7CisKKwl3b3JrX2xv Y2FsZSA9IGR1cGxvY2FsZShzYXZlZF9sb2NhbGUpOworCWlmICh3b3JrX2xvY2FsZSA9PSAobG9j YWxlX3QpIDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0Zf TUVNT1JZKSwKKwkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IikpKTsKIAogI2lmZGVmIFdJTjMy CiAKQEAgLTgyMCwxNyArODc1LDE0IEBAIGNhY2hlX2xvY2FsZV90aW1lKHZvaWQpCiAJICogdGhl IGVuY29kaW5nIHdlJ2xsIGdldCBiYWNrIGZyb20gc3RyZnRpbWVfd2luMzIoKS4KIAkgKi8KIAot CS8qIFNhdmUgcHJldmFpbGluZyB2YWx1ZSBvZiBjdHlwZSBsb2NhbGUgKi8KLQlzYXZlX2xjX2N0 eXBlID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKLQlpZiAoIXNhdmVfbGNfY3R5cGUpCi0J CWVsb2coRVJST1IsICJzZXRsb2NhbGUoTlVMTCkgZmFpbGVkIik7Ci0Jc2F2ZV9sY19jdHlwZSA9 IHBzdHJkdXAoc2F2ZV9sY19jdHlwZSk7Ci0KIAkvKiB1c2UgbGNfdGltZSB0byBzZXQgdGhlIGN0 eXBlICovCi0Jc2V0bG9jYWxlKExDX0NUWVBFLCBsb2NhbGVfdGltZSk7CisJd29ya19sb2NhbGUg PSBuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgbG9jYWxlX3RpbWUsIHdvcmtfbG9jYWxlKTsKKwlB c3NlcnQod29ya19sb2NhbGUgIT0gKGxvY2FsZV90KSAwKTsKICNlbmRpZgogCi0Jc2V0bG9jYWxl KExDX1RJTUUsIGxvY2FsZV90aW1lKTsKKwl3b3JrX2xvY2FsZSA9IG5ld2xvY2FsZShMQ19USU1F X01BU0ssIGxvY2FsZV90aW1lLCB3b3JrX2xvY2FsZSk7CisJQXNzZXJ0KHdvcmtfbG9jYWxlICE9 IChsb2NhbGVfdCkgMCk7CisJdXNlbG9jYWxlKHdvcmtfbG9jYWxlKTsKIAogCS8qIFdlIHVzZSB0 aW1lcyBjbG9zZSB0byBjdXJyZW50IHRpbWUgYXMgZGF0YSBmb3Igc3RyZnRpbWUoKS4gKi8KIAl0 aW1lbm93ID0gdGltZShOVUxMKTsKQEAgLTg3OCwxMiArOTMwLDggQEAgY2FjaGVfbG9jYWxlX3Rp bWUodm9pZCkKIAkgKiBSZXN0b3JlIHRoZSBwcmV2YWlsaW5nIGxvY2FsZSBzZXR0aW5nczsgYXMg aW4gUEdMQ19sb2NhbGVjb252KCksCiAJICogZmFpbHVyZSB0byBkbyBzbyBpcyBmYXRhbC4KIAkg Ki8KLSNpZmRlZiBXSU4zMgotCWlmICghc2V0bG9jYWxlKExDX0NUWVBFLCBzYXZlX2xjX2N0eXBl KSkKLQkJZWxvZyhGQVRBTCwgImZhaWxlZCB0byByZXN0b3JlIExDX0NUWVBFIHRvIFwiJXNcIiIs IHNhdmVfbGNfY3R5cGUpOwotI2VuZGlmCi0JaWYgKCFzZXRsb2NhbGUoTENfVElNRSwgc2F2ZV9s Y190aW1lKSkKLQkJZWxvZyhGQVRBTCwgImZhaWxlZCB0byByZXN0b3JlIExDX1RJTUUgdG8gXCIl c1wiIiwgc2F2ZV9sY190aW1lKTsKKwl1c2Vsb2NhbGUoc2F2ZWRfbG9jYWxlKTsKKwlmcmVlbG9j YWxlKHdvcmtfbG9jYWxlKTsKIAogCS8qCiAJICogQXQgdGhpcyBwb2ludCB3ZSd2ZSBkb25lIG91 ciBiZXN0IHRvIGNsZWFuIHVwLCBhbmQgY2FuIHRocm93IGVycm9ycywgb3IKQEAgLTg5MiwxMiAr OTQwLDYgQEAgY2FjaGVfbG9jYWxlX3RpbWUodm9pZCkKIAlpZiAoc3RyZnRpbWVmYWlsKQogCQll bG9nKEVSUk9SLCAic3RyZnRpbWUoKSBmYWlsZWQ6ICVtIik7CiAKLQkvKiBSZWxlYXNlIHRoZSBw c3RyZHVwJ2QgbG9jYWxlIG5hbWVzICovCi0JcGZyZWUoc2F2ZV9sY190aW1lKTsKLSNpZmRlZiBX SU4zMgotCXBmcmVlKHNhdmVfbGNfY3R5cGUpOwotI2VuZGlmCi0KICNpZm5kZWYgV0lOMzIKIAog CS8qCkBAIC0xMjkyLDE4ICsxMzM0LDE0IEBAIGxjX2NvbGxhdGVfaXNfYyhPaWQgY29sbGF0aW9u KQogCWlmIChjb2xsYXRpb24gPT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQogCXsKIAkJc3RhdGlj IGludAlyZXN1bHQgPSAtMTsKLQkJY2hhcgkgICAqbG9jYWxlcHRyOwogCiAJCWlmIChkZWZhdWx0 X2xvY2FsZS5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQogCQkJcmV0dXJuIGZhbHNlOwog CiAJCWlmIChyZXN1bHQgPj0gMCkKIAkJCXJldHVybiAoYm9vbCkgcmVzdWx0OwotCQlsb2NhbGVw dHIgPSBzZXRsb2NhbGUoTENfQ09MTEFURSwgTlVMTCk7Ci0JCWlmICghbG9jYWxlcHRyKQotCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgTENfQ09MTEFURSBzZXR0aW5nIik7CiAKLQkJcmVzdWx0ID0g bG9jYWxlX2lzX2MobG9jYWxlcHRyLCBmYWxzZSk7CisJCXJlc3VsdCA9IGxvY2FsZV9pc19jKGN1 cnJfbG9jYWxlcy5jb2xsYXRlLCBmYWxzZSk7CiAKIAkJcmV0dXJuIChib29sKSByZXN1bHQ7CiAJ fQpAQCAtMTMzNiwyMyArMTM3NCwxOSBAQCBsY19jdHlwZV9pc19jKE9pZCBjb2xsYXRpb24pCiAK IAkvKgogCSAqIElmIHdlJ3JlIGFza2VkIGFib3V0IHRoZSBkZWZhdWx0IGNvbGxhdGlvbiwgd2Ug aGF2ZSB0byBpbnF1aXJlIG9mIHRoZSBDCi0JICogbGlicmFyeS4gIENhY2hlIHRoZSByZXN1bHQg c28gd2Ugb25seSBoYXZlIHRvIGNvbXB1dGUgaXQgb25jZS4KKwkgKiBsaWJyYXJ5LgogCSAqLwog CWlmIChjb2xsYXRpb24gPT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQogCXsKIAkJc3RhdGljIGlu dAlyZXN1bHQgPSAtMTsKLQkJY2hhcgkgICAqbG9jYWxlcHRyOwogCiAJCWlmIChkZWZhdWx0X2xv Y2FsZS5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQogCQkJcmV0dXJuIGZhbHNlOwogCiAJ CWlmIChyZXN1bHQgPj0gMCkKIAkJCXJldHVybiAoYm9vbCkgcmVzdWx0OwotCQlsb2NhbGVwdHIg PSBzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOwotCQlpZiAoIWxvY2FsZXB0cikKLQkJCWVsb2co RVJST1IsICJpbnZhbGlkIExDX0NUWVBFIHNldHRpbmciKTsKIAotCQlyZXN1bHQgPSBsb2NhbGVf aXNfYyhsb2NhbGVwdHIsIGZhbHNlKTsKKwkJcmVzdWx0ID0gbG9jYWxlX2lzX2MoY3Vycl9sb2Nh bGVzLmN0eXBlLCBmYWxzZSk7CiAKIAkJcmV0dXJuIChib29sKSByZXN1bHQ7CiAJfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9wb3N0aW5pdC5jCmluZGV4IGE5MmEwYzQzOGYuLjA3NDFmNTY2NmIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9pbml0L3Bvc3Rpbml0LmMKQEAgLTQwNSwxNCArNDA1LDE0IEBAIENoZWNrTXlEYXRhYmFz ZShjb25zdCBjaGFyICpuYW1lLCBib29sIGFtX3N1cGVydXNlciwgYm9vbCBvdmVycmlkZV9hbGxv d19jb25uZWN0CiAJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKERBVEFCQVNFT0lELCB0 dXAsIEFudW1fcGdfZGF0YWJhc2VfZGF0Y3R5cGUpOwogCWN0eXBlID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhkYXR1bSk7CiAKLQlpZiAocGdfcGVybV9zZXRsb2NhbGUoTENfQ09MTEFURSwgY29sbGF0 ZSkgPT0gTlVMTCkKKwlpZiAocGdfc2V0bG9jYWxlKExDX0NPTExBVEUsIGNvbGxhdGUpID09IE5V TEwpCiAJCWVyZXBvcnQoRkFUQUwsCiAJCQkJKGVycm1zZygiZGF0YWJhc2UgbG9jYWxlIGlzIGlu Y29tcGF0aWJsZSB3aXRoIG9wZXJhdGluZyBzeXN0ZW0iKSwKIAkJCQkgZXJyZGV0YWlsKCJUaGUg ZGF0YWJhc2Ugd2FzIGluaXRpYWxpemVkIHdpdGggTENfQ09MTEFURSBcIiVzXCIsICIKIAkJCQkJ CSAgICIgd2hpY2ggaXMgbm90IHJlY29nbml6ZWQgYnkgc2V0bG9jYWxlKCkuIiwgY29sbGF0ZSks CiAJCQkJIGVycmhpbnQoIlJlY3JlYXRlIHRoZSBkYXRhYmFzZSB3aXRoIGFub3RoZXIgbG9jYWxl IG9yIGluc3RhbGwgdGhlIG1pc3NpbmcgbG9jYWxlLiIpKSk7CiAKLQlpZiAocGdfcGVybV9zZXRs b2NhbGUoTENfQ1RZUEUsIGN0eXBlKSA9PSBOVUxMKQorCWlmIChwZ19zZXRsb2NhbGUoTENfQ1RZ UEUsIGN0eXBlKSA9PSBOVUxMKQogCQllcmVwb3J0KEZBVEFMLAogCQkJCShlcnJtc2coImRhdGFi YXNlIGxvY2FsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBvcGVyYXRpbmcgc3lzdGVtIiksCiAJCQkJ IGVycmRldGFpbCgiVGhlIGRhdGFiYXNlIHdhcyBpbml0aWFsaXplZCB3aXRoIExDX0NUWVBFIFwi JXNcIiwgIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGlscy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGlscy5jCmluZGV4IDk5NzE1NjUxNWMuLjhkYzdkYTQ3YmQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21iL21idXRpbHMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9tYi9tYnV0aWxzLmMKQEAgLTEyMzgsNyArMTIzOCw3IEBAIHBnX2JpbmRfdGV4 dGRvbWFpbl9jb2Rlc2V0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCiAJaW50CQkJbmV3X21zZ2Vu YzsKIAogI2lmbmRlZiBXSU4zMgotCWlmIChsb2NhbGVfaXNfYyhsb2NhbGVfY3R5cGUsIHRydWUp KQorCWlmIChsb2NhbGVfaXNfYyhwZ19zZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpLCB0cnVlKSkK ICNlbmRpZgogCQlpZiAoZW5jb2RpbmcgIT0gUEdfU1FMX0FTQ0lJICYmCiAJCQlyYXdfcGdfYmlu ZF90ZXh0ZG9tYWluX2NvZGVzZXQoZG9tYWlubmFtZSwgZW5jb2RpbmcpKQpkaWZmIC0tZ2l0IGEv c3JjL2NvbW1vbi9leGVjLmMgYi9zcmMvY29tbW9uL2V4ZWMuYwppbmRleCBmMjA5YjkzNGRmLi5m N2E5NjQzYmU0IDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL2V4ZWMuYworKysgYi9zcmMvY29tbW9u L2V4ZWMuYwpAQCAtNDM4LDIyICs0MzgsNiBAQCBzZXRfcGdsb2NhbGVfcGdzZXJ2aWNlKGNvbnN0 IGNoYXIgKmFyZ3YwLCBjb25zdCBjaGFyICphcHApCiAJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwog CWNoYXIJCW15X2V4ZWNfcGF0aFtNQVhQR1BBVEhdOwogCi0JLyogZG9uJ3Qgc2V0IExDX0FMTCBp biB0aGUgYmFja2VuZCAqLwotCWlmIChzdHJjbXAoYXBwLCBQR19URVhURE9NQUlOKCJwb3N0Z3Jl cyIpKSAhPSAwKQotCXsKLQkJc2V0bG9jYWxlKExDX0FMTCwgIiIpOwotCi0JCS8qCi0JCSAqIE9u ZSBjb3VsZCBtYWtlIGEgY2FzZSBmb3IgcmVwcm9kdWNpbmcgaGVyZSBQb3N0bWFzdGVyTWFpbigp J3MgdGVzdAotCQkgKiBmb3Igd2hldGhlciB0aGUgcHJvY2VzcyBpcyBtdWx0aXRocmVhZGVkLiAg VW5saWtlIHRoZSBwb3N0bWFzdGVyLAotCQkgKiBubyBmcm9udGVuZCBwcm9ncmFtIGNhbGxzIHNp Z3Byb2NtYXNrKCkgb3Igb3RoZXJ3aXNlIHByb3ZpZGVzIGZvcgotCQkgKiBtdXR1YWwgZXhjbHVz aW9uIGJldHdlZW4gc2lnbmFsIGhhbmRsZXJzLiAgV2hpbGUgZnJvbnRlbmRzIHVzaW5nCi0JCSAq IGZvcmsoKSwgaWYgbXVsdGl0aHJlYWRlZCwgYXJlIGZvcm1hbGx5IGV4cG9zZWQgdG8gdW5kZWZp bmVkCi0JCSAqIGJlaGF2aW9yLCB3ZSBoYXZlIG5vdCB3aXRuZXNzZWQgYSBjb25jcmV0ZSBidWcu ICBUaGVyZWZvcmUsCi0JCSAqIGNvbXBsYWluaW5nIGFib3V0IG11bHRpdGhyZWFkaW5nIGhlcmUg bWF5IGJlIG1lcmUgcGVkYW50cnkuCi0JCSAqLwotCX0KLQogCWlmIChmaW5kX215X2V4ZWMoYXJn djAsIG15X2V4ZWNfcGF0aCkgPCAwKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKaW5k ZXggODcyYmVmNzk4YS4uNjA2ODIwNTFjYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv cGdfbG9jYWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKQEAgLTUyLDcg KzUyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKmxvY2FsaXplZF9mdWxsX21vbnRoc1td OwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZGF0YWJhc2VfY3R5cGVfaXNfYzsKIAogZXh0ZXJu IGJvb2wgY2hlY2tfbG9jYWxlKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlLCBjaGFy ICoqY2Fub25uYW1lKTsKLWV4dGVybiBjaGFyICpwZ19wZXJtX3NldGxvY2FsZShpbnQgY2F0ZWdv cnksIGNvbnN0IGNoYXIgKmxvY2FsZSk7CitleHRlcm4gY2hhciAqcGdfc2V0bG9jYWxlKGludCBj YXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKTsKIAogZXh0ZXJuIGJvb2wgbG9jYWxlX2lzX2Mo Y29uc3QgY2hhciAqbG9jYWxlLCBib29sIGlnbm9yZV9jYXNlKTsKIGV4dGVybiBib29sIGxjX2Nv bGxhdGVfaXNfYyhPaWQgY29sbGF0aW9uKTsKLS0gClRyaXN0YW4gUGFydGluCk5lb24gKGh0dHBz Oi8vbmVvbi50ZWNoKQoK --9ec3b9dac344773d3740327eca5971cd40c5c91dccea436a226057bccc8e--