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 1poPVw-0006WU-Qt for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Apr 2023 14:07:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1poPVv-0002tq-N6 for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Apr 2023 14:07:27 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1poPVu-0002th-VJ for pgsql-hackers@lists.postgresql.org; Mon, 17 Apr 2023 14:07:27 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1poPVl-000KL4-AN for pgsql-hackers@postgresql.org; Mon, 17 Apr 2023 14:07:25 +0000 Received: by mail-wm1-x335.google.com with SMTP id d8-20020a05600c3ac800b003ee6e324b19so13159311wms.1 for ; Mon, 17 Apr 2023 07:07:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681740436; x=1684332436; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=tEe/Tl6gKKYVbErHxrnNyv9gjZC3VxQJ0rCJt7+TtvI=; b=CJ3HRzWCpd90PXs1UxTIe/MTvUZdZZm26gl6rOiw2N5cYM165feap/niXVzfXj4LAM tr7LfZDRoZxpEpI7A+TyFiegZgzdUggLh7YnUegnDizgwvtsIR61Dl21fcAdHYeBsiVs xbd9HrlYxuaE579FSPQVHROsxQOdhuKx2PS6HZWukVWwyp6pCHCEUxpnPwoHReSMy06n ni7VB0+yAv1ZYyNXSzZRw2xjmeCbnzoIzd7f/WKamb3fQgNeeIlNCKpxMIip+2im/nKB t50lfR6PabMj63OVlMxEqn8wrw12qVm0IegU+/ArcY/7VdrpH96OHOJSu02oYaUMJcXY Iuyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681740436; x=1684332436; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=tEe/Tl6gKKYVbErHxrnNyv9gjZC3VxQJ0rCJt7+TtvI=; b=I6bB6idV+2AUAPPr9N6xktNE2707rOxERVu8vu59qubP1mLPL3kLxDkbvUuE345yjP SPACO4BR7oZJj4HI6yA/nuh25aXHeD82pn7ffMIxALonn6pWiP2CzLY+Cd/1EAcYMjlj +NyYTswscYbWse0pkGABMRK3ZT8gDlT7oioDpjh02D5/PqX1cnKLh6HKMW49MhAGpt0f Wlt/IwNRHs0ed74DgvIMZY4LjZIaEJOgM66331/wbADDGRL3tzotxk+xp+6bohUKdqya PftRNks+pLBue1lHpfZvNetr9/cgboaST6X/i8HXFnvXqAgI2h5WrXGw6S0tSTmuD5+u l+rw== X-Gm-Message-State: AAQBX9cAk/VSxFAOCBD/7H/KAu3YnrfIsPEZuXaBqQDg7N6FK9/HPr0c 7jkSB+l08dCic0Wh9/QUfy8= X-Google-Smtp-Source: AKy350Y438Ile35VC67hsrXzhRI2Q4lXsHa+e+GVn1DNdEfmLbZ7CHIsIiHPA/RN3orwP+nKqo5ETw== X-Received: by 2002:a05:600c:298:b0:3f0:f3ee:9e2a with SMTP id 24-20020a05600c029800b003f0f3ee9e2amr7362667wmk.35.1681740435497; Mon, 17 Apr 2023 07:07:15 -0700 (PDT) Received: from [192.168.2.247] ([54.239.6.186]) by smtp.gmail.com with ESMTPSA id o3-20020a5d4743000000b002f9e04459desm3772506wrs.109.2023.04.17.07.07.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Apr 2023 07:07:14 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------CtMnbI3Uj1zRZxQw74CLnZI0" Message-ID: Date: Mon, 17 Apr 2023 16:05:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: Synchronizing slots from primary to standby Content-Language: en-US From: "Drouvot, Bertrand" To: Peter Eisentraut , Bruce Momjian , Ashutosh Sharma Cc: Andres Freund , pgsql-hackers References: <514f6f2f-6833-4539-39f1-96cd1e011f23@enterprisedb.com> <18dbc929-a281-8552-4f1d-7e4d0e4eedba@enterprisedb.com> <646acd8d-9896-ed8d-2ab4-0bf11b3285d4@enterprisedb.com> <20220205195944.drwc3psrb5udt2cw@alap3.anarazel.de> <20220207203222.22aktwxrt3fcllru@alap3.anarazel.de> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------CtMnbI3Uj1zRZxQw74CLnZI0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 4/14/23 3:22 PM, Drouvot, Bertrand wrote: > Now that the "Minimal logical decoding on standby" patch series (mentioned up-thread) has been > committed, I think we can resume working on this one ("Synchronizing slots from primary to standby"). > > I'll work on a rebase and share it once done (unless someone already started working on a rebase). > Please find attached V5 (a rebase of V4 posted up-thread). In addition to the "rebasing" work, the TAP test adds a test about conflict handling (logical slot invalidation) relying on the work done in the "Minimal logical decoding on standby" patch series. I did not look more at the patch (than what's was needed for the rebase) but plan to do so. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------CtMnbI3Uj1zRZxQw74CLnZI0 Content-Type: text/plain; charset=UTF-8; name="v5-0001-Synchronize-logical-replication-slots-from-primar.patch" Content-Disposition: attachment; filename*0="v5-0001-Synchronize-logical-replication-slots-from-primar.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2NTUzNTllZWRmMzdkOGYyZTUyMmFlYjFlYzhjNDhhZGZjMTc1OWIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZXJ0cmFuZGRyb3V2 b3QucGdAZ21haWwuY29tPgpEYXRlOiBUaHUsIDEzIEFwciAyMDIzIDExOjMyOjI4ICswMDAw ClN1YmplY3Q6IFtQQVRDSCB2NV0gU3luY2hyb25pemUgbG9naWNhbCByZXBsaWNhdGlvbiBz bG90cyBmcm9tIHByaW1hcnkgdG8KIHN0YW5kYnkKCi0tLQogZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDM0ICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAgICAgICB8ICAgMyArCiAuLi4vbGlicHF3YWxy ZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMgICAgICAgfCAgOTUgKysrKwogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyAgICB8IDI2MyArKysrKysrLS0t LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCAgIHwgICAx ICsKIC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyAgICAgICB8ICA4 NiArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgICAg fCA0MTMgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v cmVwbF9ncmFtLnkgICAgICAgICAgIHwgIDMyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9yZXBsX3NjYW5uZXIubCAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vc2xvdGZ1bmNzLmMgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi93YWxzZW5kZXIuYyAgICAgICAgICAgfCAxOTUgKysrKysrKysrCiBzcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMgICAgICAgfCAgIDMgKwogc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDI2ICsrCiBzcmMvYmFj a2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oICAgICAgIHwgICAzICsKIHNyYy9p bmNsdWRlL25vZGVzL3JlcGxub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCAgICAgfCAgIDIgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oICAgICAgIHwgICA5ICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCAgICAgICAgIHwgIDIwICsK IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oICAgICB8ICAgOCAr LQogc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oICAgICAgICAgICAgICAgIHwgICAx ICsKIHNyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAzN19zbG90X3N5bmMucGwgICAgICAgICAgfCAx MzAgKysrKysrCiAyOCBmaWxlcyBjaGFuZ2VkLCAxMjcyIGluc2VydGlvbnMoKyksIDk0IGRl bGV0aW9ucygtKQogICAzLjglIGRvYy9zcmMvc2dtbC8KICAgNy4xJSBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyLwogIDU0LjclIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvCiAgMTQuOSUgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vCiAgIDMu MyUgc3JjL2JhY2tlbmQvCiAgIDQuMCUgc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vCiAgMTAu OSUgc3JjL3Rlc3QvcmVjb3ZlcnkvdC8KCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggMDkxYTc5ZDRmMy4u MTM2MDg4NTIwOCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNDQ2Niw2ICs0NDY2LDIzIEBAIHJlc3Rv cmVfY29tbWFuZCA9ICdjb3B5ICJDOlxcc2VydmVyXFxhcmNoaXZlZGlyXFwlZiIgIiVwIicg ICMgV2luZG93cwogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAK KyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXN0YW5kYnktc2xvdC1uYW1lcyIgeHJlZmxh YmVsPSJzdGFuZGJ5X3Nsb3RfbmFtZXMiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+c3RhbmRi eV9zbG90X25hbWVzPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgIDxp bmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+c3RhbmRieV9zbG90X25hbWVz PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwv aW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxw YXJhPgorICAgICAgICBMaXN0IG9mIHBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3RzIHRoYXQg bG9naWNhbCByZXBsaWNhdGlvbiB3YWl0cyBmb3IuCisgICAgICAgIElmIGEgbG9naWNhbCBy ZXBsaWNhdGlvbiBjb25uZWN0aW9uIGlzIG1lYW50IHRvIHN3aXRjaCB0byBhIHBoeXNpY2Fs CisgICAgICAgIHN0YW5kYnkgYWZ0ZXIgdGhlIHN0YW5kYnkgaXMgcHJvbW90ZWQsIHRoZSBw aHlzaWNhbCByZXBsaWNhdGlvbiBzbG90CisgICAgICAgIGZvciB0aGUgc3RhbmRieSBzaG91 bGQgYmUgbGlzdGVkIGhlcmUuICBUaGlzIGVuc3VyZXMgdGhhdCBsb2dpY2FsCisgICAgICAg IHJlcGxpY2F0aW9uIGlzIG5vdCBhaGVhZCBvZiB0aGUgcGh5c2ljYWwgc3RhbmRieS4KKyAg ICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4K KwogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L3NlY3QyPgogCkBAIC00NjQ5LDYgKzQ2 NjYsMjMgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwv cmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+ CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1z eW5jaHJvbml6ZV9zbG90X25hbWVzIiB4cmVmbGFiZWw9InN5bmNocm9uaXplX3Nsb3RfbmFt ZXMiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+c3luY2hyb25pemVfc2xvdF9uYW1lczwvdmFy bmFtZT4gKDx0eXBlPnN0cmluZzwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAg IDxwcmltYXJ5Pjx2YXJuYW1lPnN5bmNocm9uaXplX3Nsb3RfbmFtZXM8L3Zhcm5hbWU+IGNv bmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+Cisg ICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAg IFNwZWNpZmllcyBhIGxpc3Qgb2YgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90cyB0aGF0IGEg cGh5c2ljYWwgc3RhbmRieQorICAgICAgICBzaG91bGQgc3luY2hyb25pemUgZnJvbSB0aGUg cHJpbWFyeSBzZXJ2ZXIuICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBiZQorICAgICAgICBhYmxl IHRvIHJldGFyZ2V0IHRob3NlIGxvZ2ljYWwgcmVwbGljYXRpb24gY29ubmVjdGlvbnMgdG8g dGhpcyBzdGFuZGJ5CisgICAgICAgIGlmIGl0IGdldHMgcHJvbW90ZWQuICBTcGVjaWZ5IDxs aXRlcmFsPio8L2xpdGVyYWw+IHRvIHN5bmNocm9uaXplIGFsbAorICAgICAgICBsb2dpY2Fs IHJlcGxpY2F0aW9uIHNsb3RzLiAgVGhlIGRlZmF1bHQgaXMgZW1wdHkuCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAg PC92YXJpYWJsZWxpc3Q+CiAgICAgPC9zZWN0Mj4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv c3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IDMyNTFkODliYTguLjg3MjE3MDZiNzkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTk5MSw3ICs5OTEs NyBAQCBBbHRlclN1YnNjcmlwdGlvbl9yZWZyZXNoKFN1YnNjcmlwdGlvbiAqc3ViLCBib29s IGNvcHlfZGF0YSwKIAogCQkJCVJlbW92ZVN1YnNjcmlwdGlvblJlbChzdWItPm9pZCwgcmVs aWQpOwogCi0JCQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcChzdWItPm9pZCwgcmVsaWQpOwor CQkJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoTXlEYXRhYmFzZUlkLCBzdWItPm9pZCwgcmVs aWQpOwogCiAJCQkJLyoKIAkJCQkgKiBGb3IgUkVBRFkgc3RhdGUsIHdlIHdvdWxkIGhhdmUg YWxyZWFkeSBkcm9wcGVkIHRoZQpAQCAtMTU4OSw3ICsxNTg5LDcgQEAgRHJvcFN1YnNjcmlw dGlvbihEcm9wU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKQogCXsK IAkJTG9naWNhbFJlcFdvcmtlciAqdyA9IChMb2dpY2FsUmVwV29ya2VyICopIGxmaXJzdChs Yyk7CiAKLQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcCh3LT5zdWJpZCwgdy0+cmVsaWQpOwor CQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wKHctPmRiaWQsIHctPnN1YmlkLCB3LT5yZWxpZCk7 CiAJfQogCWxpc3RfZnJlZShzdWJ3b3JrZXJzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dv cmtlci5jCmluZGV4IDBkZDIyYjIzNTEuLmE4OWQxZjEwYTEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2Jnd29ya2VyLmMKQEAgLTEyOSw2ICsxMjksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 CiAJewogCQkiQXBwbHlXb3JrZXJNYWluIiwgQXBwbHlXb3JrZXJNYWluCiAJfSwKKwl7CisJ CSJSZXBsU2xvdFN5bmNNYWluIiwgUmVwbFNsb3RTeW5jTWFpbgorCX0sCiAJewogCQkiUGFy YWxsZWxBcHBseVdvcmtlck1haW4iLCBQYXJhbGxlbEFwcGx5V29ya2VyTWFpbgogCX0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGli cHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNl aXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5kZXggMDUyNTA1ZTQ2Zi4uNGY3NDE3YzQ5YSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZlci9s aWJwcXdhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3 YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs dWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgogI2lu Y2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKyNpbmNsdWRlICJ1dGlscy92YXJsZW5hLmgi CiAKIFBHX01PRFVMRV9NQUdJQzsKIApAQCAtNTgsNiArNTksNyBAQCBzdGF0aWMgdm9pZCBs aWJwcXJjdl9nZXRfc2VuZGVyaW5mbyhXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJCQkJCQkJ CQljaGFyICoqc2VuZGVyX2hvc3QsIGludCAqc2VuZGVyX3BvcnQpOwogc3RhdGljIGNoYXIg KmxpYnBxcmN2X2lkZW50aWZ5X3N5c3RlbShXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJCQkJ CQkJCQkgIFRpbWVMaW5lSUQgKnByaW1hcnlfdGxpKTsKK3N0YXRpYyBMaXN0ICpsaWJwcXJj dl9saXN0X3Nsb3RzKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwgY29uc3QgY2hhciAqc2xvdF9u YW1lcyk7CiBzdGF0aWMgaW50CWxpYnBxcmN2X3NlcnZlcl92ZXJzaW9uKFdhbFJlY2VpdmVy Q29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBsaWJwcXJjdl9yZWFkdGltZWxpbmVoaXN0b3J5 ZmlsZShXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJCQkJCQkJCQkJCSBUaW1lTGluZUlEIHRs aSwgY2hhciAqKmZpbGVuYW1lLApAQCAtOTYsNiArOTgsNyBAQCBzdGF0aWMgV2FsUmVjZWl2 ZXJGdW5jdGlvbnNUeXBlIFBRV2FsUmVjZWl2ZXJGdW5jdGlvbnMgPSB7CiAJLndhbHJjdl9y ZWNlaXZlID0gbGlicHFyY3ZfcmVjZWl2ZSwKIAkud2FscmN2X3NlbmQgPSBsaWJwcXJjdl9z ZW5kLAogCS53YWxyY3ZfY3JlYXRlX3Nsb3QgPSBsaWJwcXJjdl9jcmVhdGVfc2xvdCwKKwku d2FscmN2X2xpc3Rfc2xvdHMgPSBsaWJwcXJjdl9saXN0X3Nsb3RzLAogCS53YWxyY3ZfZ2V0 X2JhY2tlbmRfcGlkID0gbGlicHFyY3ZfZ2V0X2JhY2tlbmRfcGlkLAogCS53YWxyY3ZfZXhl YyA9IGxpYnBxcmN2X2V4ZWMsCiAJLndhbHJjdl9kaXNjb25uZWN0ID0gbGlicHFyY3ZfZGlz Y29ubmVjdApAQCAtNDA5LDYgKzQxMiw5OCBAQCBsaWJwcXJjdl9zZXJ2ZXJfdmVyc2lvbihX YWxSZWNlaXZlckNvbm4gKmNvbm4pCiAJcmV0dXJuIFBRc2VydmVyVmVyc2lvbihjb25uLT5z dHJlYW1Db25uKTsKIH0KIAorLyoKKyAqIEdldCBsaXN0IG9mIHNsb3RzIGZyb20gcHJpbWFy eS4KKyAqLworc3RhdGljIExpc3QgKgorbGlicHFyY3ZfbGlzdF9zbG90cyhXYWxSZWNlaXZl ckNvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNsb3RfbmFtZXMpCit7CisJUEdyZXN1bHQgICAq cmVzOworCUxpc3QJICAgKnNsb3RsaXN0ID0gTklMOworCWludAkJCW50dXBsZXM7CisJU3Ry aW5nSW5mb0RhdGEgczsKKwlXYWxSZWN2UmVwbGljYXRpb25TbG90RGF0YSAqc2xvdF9kYXRh OworCisJaW5pdFN0cmluZ0luZm8oJnMpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnMs ICJMSVNUX1NMT1RTIik7CisKKwlpZiAoc3RyY21wKHNsb3RfbmFtZXMsICIiKSAhPSAwICYm IHN0cmNtcChzbG90X25hbWVzLCAiKiIpICE9IDApCisJeworCQljaGFyCSAgICpyYXduYW1l OworCQlMaXN0CSAgICpuYW1lbGlzdDsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoJnMsICcgJyk7CisJCXJhd25hbWUgPSBwc3RyZHVwKHNsb3RfbmFt ZXMpOworCQlTcGxpdElkZW50aWZpZXJTdHJpbmcocmF3bmFtZSwgJywnLCAmbmFtZWxpc3Qp OworCQlmb3JlYWNoIChsYywgbmFtZWxpc3QpCisJCXsKKwkJCWlmIChsYyAhPSBsaXN0X2hl YWQobmFtZWxpc3QpKQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZzLCAnLCcpOworCQkJ YXBwZW5kU3RyaW5nSW5mbygmcywgIiVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihs Zmlyc3QobGMpKSk7CisJCX0KKwl9CisKKwlyZXMgPSBsaWJwcXJjdl9QUWV4ZWMoY29ubi0+ c3RyZWFtQ29ubiwgcy5kYXRhKTsKKwlwZnJlZShzLmRhdGEpOworCWlmIChQUXJlc3VsdFN0 YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCVBRY2xlYXIocmVzKTsKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgcmVjZWl2ZSBsaXN0IG9m IHNsb3RzIHRoZSBwcmltYXJ5IHNlcnZlcjogJXMiLAorCQkJCQkJcGNob21wKFBRZXJyb3JN ZXNzYWdlKGNvbm4tPnN0cmVhbUNvbm4pKSkpKTsKKwl9CisJaWYgKFBRbmZpZWxkcyhyZXMp IDwgMTApCisJeworCQlpbnQJCQluZmllbGRzID0gUFFuZmllbGRzKHJlcyk7CisKKwkJUFFj bGVhcihyZXMpOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImludmFsaWQgcmVz cG9uc2UgZnJvbSBwcmltYXJ5IHNlcnZlciIpLAorCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5v dCBnZXQgbGlzdCBvZiBzbG90czogZ290ICVkIGZpZWxkcywgZXhwZWN0ZWQgJWQgb3IgbW9y ZSBmaWVsZHMuIiwKKwkJCQkJCSAgIG5maWVsZHMsIDEwKSkpOworCX0KKworCW50dXBsZXMg PSBQUW50dXBsZXMocmVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG50dXBsZXM7IGkrKykK Kwl7CisJCWNoYXIJICAgKnNsb3RfdHlwZTsKKworCQlzbG90X2RhdGEgPSBwYWxsb2MwKHNp emVvZihXYWxSZWN2UmVwbGljYXRpb25TbG90RGF0YSkpOworCQluYW1lc3RyY3B5KCZzbG90 X2RhdGEtPnBlcnNpc3RlbnRfZGF0YS5uYW1lLCBQUWdldHZhbHVlKHJlcywgaSwgMCkpOwor CQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgMSkpCisJCQluYW1lc3RyY3B5KCZzbG90X2Rh dGEtPnBlcnNpc3RlbnRfZGF0YS5wbHVnaW4sIFBRZ2V0dmFsdWUocmVzLCBpLCAxKSk7CisJ CXNsb3RfdHlwZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAyKTsKKwkJaWYgKCFQUWdldGlzbnVs bChyZXMsIGksIDMpKQorCQkJc2xvdF9kYXRhLT5wZXJzaXN0ZW50X2RhdGEuZGF0YWJhc2Ug PSBhdG9vaWQoUFFnZXR2YWx1ZShyZXMsIGksIDMpKTsKKwkJaWYgKHN0cmNtcChzbG90X3R5 cGUsICJwaHlzaWNhbCIpID09IDApCisJCXsKKwkJCWlmIChPaWRJc1ZhbGlkKHNsb3RfZGF0 YS0+cGVyc2lzdGVudF9kYXRhLmRhdGFiYXNlKSkKKwkJCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90IHdpdGggZGF0YWJhc2Ugc2V0Iik7CisJ CX0KKwkJaWYgKHBnX3N0cnRvaW50MzIoUFFnZXR2YWx1ZShyZXMsIGksIDUpKSA9PSAxKQor CQkJc2xvdF9kYXRhLT5wZXJzaXN0ZW50X2RhdGEucGVyc2lzdGVuY3kgPSBSU19URU1QT1JB Ulk7CisJCWVsc2UKKwkJCXNsb3RfZGF0YS0+cGVyc2lzdGVudF9kYXRhLnBlcnNpc3RlbmN5 ID0gUlNfUEVSU0lTVEVOVDsKKwkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGksIDYpKQorCQkJ c2xvdF9kYXRhLT5wZXJzaXN0ZW50X2RhdGEueG1pbiA9IGF0b29pZChQUWdldHZhbHVlKHJl cywgaSwgNikpOworCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgNykpCisJCQlzbG90X2Rh dGEtPnBlcnNpc3RlbnRfZGF0YS5jYXRhbG9nX3htaW4gPSBhdG9vaWQoUFFnZXR2YWx1ZShy ZXMsIGksIDcpKTsKKwkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGksIDgpKQorCQkJc2xvdF9k YXRhLT5wZXJzaXN0ZW50X2RhdGEucmVzdGFydF9sc24gPSBzdHJ0b3U2NChQUWdldHZhbHVl KHJlcywgaSwgOCksIE5VTEwsIDEwKTsKKwkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGksIDkp KQorCQkJc2xvdF9kYXRhLT5wZXJzaXN0ZW50X2RhdGEuY29uZmlybWVkX2ZsdXNoID0gc3Ry dG91NjQoUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBOVUxMLCAxMCk7CisKKwkJc2xvdF9kYXRh LT5sYXN0X3N5bmNfdGltZSA9IDA7CisJCXNsb3RsaXN0ID0gbGFwcGVuZChzbG90bGlzdCwg c2xvdF9kYXRhKTsKKwl9CisKKwlQUWNsZWFyKHJlcyk7CisKKwlyZXR1cm4gc2xvdGxpc3Q7 Cit9CisKIC8qCiAgKiBTdGFydCBzdHJlYW1pbmcgV0FMIGRhdGEgZnJvbSBnaXZlbiBzdHJl YW1pbmcgb3B0aW9ucy4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9N YWtlZmlsZQppbmRleCAyZGMyNWUzN2JiLi5iYTAzZWVmZjFjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTI1LDYgKzI1LDcgQEAgT0JKUyA9 IFwKIAlwcm90by5vIFwKIAlyZWxhdGlvbi5vIFwKIAlyZW9yZGVyYnVmZmVyLm8gXAorCXNs b3RzeW5jLm8gXAogCXNuYXBidWlsZC5vIFwKIAl0YWJsZXN5bmMubyBcCiAJd29ya2VyLm8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCA5 NzBkMTcwZTczLi4xNGFmNzI0NjM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sYXVuY2hlci5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiYWNjZXNz L2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19zdWJzY3JpcHRpb25fcmVsLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgpAQCAtMjQ2LDcg KzI0Nyw3IEBAIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29y a2VyICp3b3JrZXIsCiAgKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBsZWFkZXIg YXBwbHkgd29ya2VyIG9yIHRhYmxlIHN5bmMgd29ya2VyLgogICovCiBMb2dpY2FsUmVwV29y a2VyICoKLWxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsIGJv b2wgb25seV9ydW5uaW5nKQorbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgZGJpZCwgT2lk IHN1YmlkLCBPaWQgcmVsaWQsIGJvb2wgb25seV9ydW5uaW5nKQogewogCWludAkJCWk7CiAJ TG9naWNhbFJlcFdvcmtlciAqcmVzID0gTlVMTDsKQEAgLTI2Miw4ICsyNjMsOCBAQCBsb2dp Y2FscmVwX3dvcmtlcl9maW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlfcnVu bmluZykKIAkJaWYgKGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKIAkJCWNvbnRpbnVlOwog Ci0JCWlmICh3LT5pbl91c2UgJiYgdy0+c3ViaWQgPT0gc3ViaWQgJiYgdy0+cmVsaWQgPT0g cmVsaWQgJiYKLQkJCSghb25seV9ydW5uaW5nIHx8IHctPnByb2MpKQorCQlpZiAody0+aW5f dXNlICYmIHctPmRiaWQgPT0gZGJpZCAmJiB3LT5zdWJpZCA9PSBzdWJpZCAmJgorCQkJdy0+ cmVsaWQgPT0gcmVsaWQgJiYgKCFvbmx5X3J1bm5pbmcgfHwgdy0+cHJvYykpCiAJCXsKIAkJ CXJlcyA9IHc7CiAJCQlicmVhazsKQEAgLTMyMCw5ICszMjEsMTMgQEAgbG9naWNhbHJlcF93 b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUs IE9pZCB1c2VyaWQsCiAJLyogU2FuaXR5IGNoZWNrIC0gdGFibGVzeW5jIHdvcmtlciBjYW5u b3QgYmUgYSBzdWJ3b3JrZXIgKi8KIAlBc3NlcnQoIShpc19wYXJhbGxlbF9hcHBseV93b3Jr ZXIgJiYgT2lkSXNWYWxpZChyZWxpZCkpKTsKIAotCWVyZXBvcnQoREVCVUcxLAotCQkJKGVy cm1zZ19pbnRlcm5hbCgic3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9y IHN1YnNjcmlwdGlvbiBcIiVzXCIiLAotCQkJCQkJCSBzdWJuYW1lKSkpOworCWlmIChPaWRJ c1ZhbGlkKHN1YmlkKSkKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRlcm5h bCgic3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlv biBcIiVzXCIiLAorCQkJCQkJCQkgc3VibmFtZSkpKTsKKwllbHNlCisJCWVyZXBvcnQoREVC VUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInN0YXJ0aW5nIHJlcGxpY2F0aW9uIHNsb3Qg c3luY2hyb25pemF0aW9uIHdvcmtlciIpKSk7CiAKIAkvKiBSZXBvcnQgdGhpcyBhZnRlciB0 aGUgaW5pdGlhbCBzdGFydGluZyBtZXNzYWdlIGZvciBjb25zaXN0ZW5jeS4gKi8KIAlpZiAo bWF4X3JlcGxpY2F0aW9uX3Nsb3RzID09IDApCkBAIC0zNTksNyArMzY0LDkgQEAgcmV0cnk6 CiAJICogcmVhc29uIHdlIGRvIHRoaXMgaXMgYmVjYXVzZSBpZiBzb21lIHdvcmtlciBmYWls ZWQgdG8gc3RhcnQgdXAgYW5kIGl0cwogCSAqIHBhcmVudCBoYXMgY3Jhc2hlZCB3aGlsZSB3 YWl0aW5nLCB0aGUgaW5fdXNlIHN0YXRlIHdhcyBuZXZlciBjbGVhcmVkLgogCSAqLwotCWlm ICh3b3JrZXIgPT0gTlVMTCB8fCBuc3luY3dvcmtlcnMgPj0gbWF4X3N5bmNfd29ya2Vyc19w ZXJfc3Vic2NyaXB0aW9uKQorCWlmICh3b3JrZXIgPT0gTlVMTCB8fAorCQkoT2lkSXNWYWxp ZChyZWxpZCkgJiYKKwkJIG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3JrZXJzX3Blcl9z dWJzY3JpcHRpb24pKQogCXsKIAkJYm9vbAkJZGlkX2NsZWFudXAgPSBmYWxzZTsKIApAQCAt NDU1LDE1ICs0NjIsMjAgQEAgcmV0cnk6CiAJbWVtc2V0KCZiZ3csIDAsIHNpemVvZihiZ3cp KTsKIAliZ3cuYmd3X2ZsYWdzID0gQkdXT1JLRVJfU0hNRU1fQUNDRVNTIHwKIAkJQkdXT1JL RVJfQkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9OOwotCWJndy5iZ3dfc3RhcnRfdGltZSA9 IEJnV29ya2VyU3RhcnRfUmVjb3ZlcnlGaW5pc2hlZDsKKwliZ3cuYmd3X3N0YXJ0X3RpbWUg PSBCZ1dvcmtlclN0YXJ0X0NvbnNpc3RlbnRTdGF0ZTsKIAlzbnByaW50ZihiZ3cuYmd3X2xp YnJhcnlfbmFtZSwgQkdXX01BWExFTiwgInBvc3RncmVzIik7CiAKLQlpZiAoaXNfcGFyYWxs ZWxfYXBwbHlfd29ya2VyKQorCWlmICghT2lkSXNWYWxpZChzdWJpZCkpCisJCXNucHJpbnRm KGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIlJlcGxTbG90U3luY01haW4i KTsKKwllbHNlIGlmIChpc19wYXJhbGxlbF9hcHBseV93b3JrZXIpCiAJCXNucHJpbnRmKGJn dy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIlBhcmFsbGVsQXBwbHlXb3JrZXJN YWluIik7CiAJZWxzZQogCQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19N QVhMRU4sICJBcHBseVdvcmtlck1haW4iKTsKIAotCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkK KwlpZiAoIU9pZElzVmFsaWQoc3ViaWQpKQorCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJH V19NQVhMRU4sCisJCQkJICJyZXBsaWNhdGlvbiBzbG90IHN5bmNocm9uaXphdGlvbiB3b3Jr ZXIiKTsKKwllbHNlIGlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKIAkJc25wcmludGYoYmd3LmJn d19uYW1lLCBCR1dfTUFYTEVOLAogCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiAldSBzeW5jICV1Iiwgc3ViaWQsIHJlbGlkKTsKIAllbHNlIGlm IChpc19wYXJhbGxlbF9hcHBseV93b3JrZXIpCkBAIC01OTEsMTMgKzYwMywxMyBAQCBsb2dp Y2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwg aW50IHNpZ25vKQogICogU3RvcCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9y IHN1YmlkL3JlbGlkLCBpZiBhbnkuCiAgKi8KIHZvaWQKLWxvZ2ljYWxyZXBfd29ya2VyX3N0 b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBk YmlkLCBPaWQgc3ViaWQsIE9pZCByZWxpZCkKIHsKIAlMb2dpY2FsUmVwV29ya2VyICp3b3Jr ZXI7CiAKIAlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQp OwogCi0Jd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChzdWJpZCwgcmVsaWQsIGZh bHNlKTsKKwl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKGRiaWQsIHN1YmlkLCBy ZWxpZCwgZmFsc2UpOwogCiAJaWYgKHdvcmtlcikKIAl7CkBAIC02NDAsMTMgKzY1MiwxMyBA QCBsb2dpY2FscmVwX3BhX3dvcmtlcl9zdG9wKGludCBzbG90X25vLCB1aW50MTYgZ2VuZXJh dGlvbikKICAqIFdha2UgdXAgKHVzaW5nIGxhdGNoKSBhbnkgbG9naWNhbCByZXBsaWNhdGlv biB3b3JrZXIgZm9yIHNwZWNpZmllZCBzdWIvcmVsLgogICovCiB2b2lkCi1sb2dpY2FscmVw X3dvcmtlcl93YWtldXAoT2lkIHN1YmlkLCBPaWQgcmVsaWQpCitsb2dpY2FscmVwX3dvcmtl cl93YWtldXAoT2lkIGRiaWQsIE9pZCBzdWJpZCwgT2lkIHJlbGlkKQogewogCUxvZ2ljYWxS ZXBXb3JrZXIgKndvcmtlcjsKIAogCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxv Y2ssIExXX1NIQVJFRCk7CiAKLQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHN1 YmlkLCByZWxpZCwgdHJ1ZSk7CisJd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChk YmlkLCBzdWJpZCwgcmVsaWQsIHRydWUpOwogCiAJaWYgKHdvcmtlcikKIAkJbG9naWNhbHJl cF93b3JrZXJfd2FrZXVwX3B0cih3b3JrZXIpOwpAQCAtODg4LDcgKzkwMCw3IEBAIEFwcGx5 TGF1bmNoZXJSZWdpc3Rlcih2b2lkKQogCW1lbXNldCgmYmd3LCAwLCBzaXplb2YoYmd3KSk7 CiAJYmd3LmJnd19mbGFncyA9IEJHV09SS0VSX1NITUVNX0FDQ0VTUyB8CiAJCUJHV09SS0VS X0JBQ0tFTkRfREFUQUJBU0VfQ09OTkVDVElPTjsKLQliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBC Z1dvcmtlclN0YXJ0X1JlY292ZXJ5RmluaXNoZWQ7CisJYmd3LmJnd19zdGFydF90aW1lID0g QmdXb3JrZXJTdGFydF9Db25zaXN0ZW50U3RhdGU7CiAJc25wcmludGYoYmd3LmJnd19saWJy YXJ5X25hbWUsIEJHV19NQVhMRU4sICJwb3N0Z3JlcyIpOwogCXNucHJpbnRmKGJndy5iZ3df ZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFwcGx5TGF1bmNoZXJNYWluIik7CiAJc25w cmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLApAQCAtMTA3MSw2ICsxMDgzLDE1NyBA QCBBcHBseUxhdW5jaGVyV2FrZXVwKHZvaWQpCiAJCWtpbGwoTG9naWNhbFJlcEN0eC0+bGF1 bmNoZXJfcGlkLCBTSUdVU1IxKTsKIH0KIAorc3RhdGljIHZvaWQKK0FwcGx5TGF1bmNoZXJT dGFydFNsb3RTeW5jKGxvbmcgKndhaXRfdGltZSkKK3sKKwlXYWxSZWNlaXZlckNvbm4gKndy Y29ubjsKKwljaGFyCSAgICplcnI7CisJTGlzdAkgICAqc2xvdHM7CisJTGlzdENlbGwgICAq bGM7CisJTWVtb3J5Q29udGV4dCB0bXBjdHg7CisJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisK KwlpZiAoc3RyY21wKHN5bmNocm9uaXplX3Nsb3RfbmFtZXMsICIiKSA9PSAwKQorCQlyZXR1 cm47CisKKwl3cmNvbm4gPSB3YWxyY3ZfY29ubmVjdChQcmltYXJ5Q29ubkluZm8sIGZhbHNl LCBmYWxzZSwKKwkJCQkJCQkiTG9naWNhbCBSZXBsaWNhdGlvbiBMYXVuY2hlciIsICZlcnIp OworCWlmICghd3Jjb25uKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxk IG5vdCBjb25uZWN0IHRvIHRoZSBwcmltYXJ5IHNlcnZlcjogJXMiLCBlcnIpKSk7CisKKwkv KiBVc2UgdGVtcG9yYXJ5IGNvbnRleHQgZm9yIHRoZSBzbG90IGxpc3QgYW5kIHdvcmtlciBp bmZvLiAqLworCXRtcGN0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250 ZXh0LAorCQkJCQkJCQkgICAiTG9naWNhbCBSZXBsaWNhdGlvbiBMYXVuY2hlciBzbG90IHN5 bmMgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY3R4 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN0eCk7CisKKwlzbG90cyA9IHdhbHJjdl9s aXN0X3Nsb3RzKHdyY29ubiwgc3luY2hyb25pemVfc2xvdF9uYW1lcyk7CisKKwlmb3JlYWNo KGxjLCBzbG90cykKKwl7CisJCVdhbFJlY3ZSZXBsaWNhdGlvblNsb3REYXRhICpzbG90X2Rh dGEgPSBsZmlyc3QobGMpOworCQlMb2dpY2FsUmVwV29ya2VyICp3OworCQlUaW1lc3RhbXBU eiBsYXN0X3N5bmM7CisJCVRpbWVzdGFtcFR6CW5vdzsKKwkJbG9uZwkJZWxhcHNlZDsKKwor CQlpZiAoIU9pZElzVmFsaWQoc2xvdF9kYXRhLT5wZXJzaXN0ZW50X2RhdGEuZGF0YWJhc2Up KQorCQkJY29udGludWU7CisKKwkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9j aywgTFdfU0hBUkVEKTsKKwkJdyA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoc2xvdF9kYXRh LT5wZXJzaXN0ZW50X2RhdGEuZGF0YWJhc2UsIEludmFsaWRPaWQsCisJCQkJCQkJCSAgIElu dmFsaWRPaWQsIGZhbHNlKTsKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9j ayk7CisKKwkJaWYgKHcgIT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJLyogd29ya2VyIGlzIHJ1 bm5pbmcgYWxyZWFkeSAqLworCisJCS8qCisJCSAqIElmIHRoZSB3b3JrZXIgaXMgZWxpZ2li bGUgdG8gc3RhcnQgbm93LCBsYXVuY2ggaXQuICBPdGhlcndpc2UsCisJCSAqIGFkanVzdCB3 YWl0X3RpbWUgc28gdGhhdCB3ZSdsbCB3YWtlIHVwIGFzIHNvb24gYXMgaXQgY2FuIGJlCisJ CSAqIHN0YXJ0ZWQuCisJCSAqCisJCSAqIEVhY2ggYXBwbHkgd29ya2VyIGNhbiBvbmx5IGJl IHJlc3RhcnRlZCBvbmNlIHBlcgorCQkgKiB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWws IHNvIHRoYXQgZXJyb3JzIGRvIG5vdCBjYXVzZSB1cyB0bworCQkgKiByZXBlYXRlZGx5IHJl c3RhcnQgdGhlIHdvcmtlciBhcyBmYXN0IGFzIHBvc3NpYmxlLgorCQkgKi8KKwkJbGFzdF9z eW5jID0gc2xvdF9kYXRhLT5sYXN0X3N5bmNfdGltZTsKKwkJbm93ID0gR2V0Q3VycmVudFRp bWVzdGFtcCgpOworCQlpZiAobGFzdF9zeW5jID09IDAgfHwKKwkJCShlbGFwc2VkID0gVGlt ZXN0YW1wRGlmZmVyZW5jZU1pbGxpc2Vjb25kcyhsYXN0X3N5bmMsIG5vdykpID49IHdhbF9y ZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCkKKwkJeworCQkJc2xvdF9kYXRhLT5sYXN0X3N5bmNf dGltZSA9IG5vdzsKKwkJCWxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChzbG90X2RhdGEtPnBl cnNpc3RlbnRfZGF0YS5kYXRhYmFzZSwKKwkJCQkJCQkJCSBJbnZhbGlkT2lkLCBOVUxMLAor CQkJCQkJCQkJIEJPT1RTVFJBUF9TVVBFUlVTRVJJRCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJ CSBEU01fSEFORExFX0lOVkFMSUQpOworCQl9CisJCWVsc2UKKwkJeworCQkJKndhaXRfdGlt ZSA9IE1pbigqd2FpdF90aW1lLAorCQkJCQkJCXdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZh bCAtIGVsYXBzZWQpOworCQl9CisJfQorCisJLyogU3dpdGNoIGJhY2sgdG8gb3JpZ2luYWwg bWVtb3J5IGNvbnRleHQuICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJ LyogQ2xlYW4gdGhlIHRlbXBvcmFyeSBtZW1vcnkuICovCisJTWVtb3J5Q29udGV4dERlbGV0 ZSh0bXBjdHgpOworCisJd2FscmN2X2Rpc2Nvbm5lY3Qod3Jjb25uKTsKK30KKworc3RhdGlj IHZvaWQKK0FwcGx5TGF1bmNoZXJTdGFydFN1YnMobG9uZyAqd2FpdF90aW1lKQoreworCUxp c3QJICAgKnN1Ymxpc3Q7CisJTGlzdENlbGwgICAqbGM7CisJTWVtb3J5Q29udGV4dCBzdWJj dHg7CisJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisKKwkvKiBVc2UgdGVtcG9yYXJ5IGNvbnRl eHQgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgYWNyb3NzIGN5Y2xlcy4gKi8KKwlzdWJjdHgg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAg IkxvZ2ljYWwgUmVwbGljYXRpb24gTGF1bmNoZXIgc3VibGlzdCIsCisJCQkJCQkJCSAgIEFM TE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhzdWJjdHgpOworCisJLyogU3RhcnQgdGhlIG1pc3Npbmcgd29ya2VycyBmb3IgZW5hYmxl ZCBzdWJzY3JpcHRpb25zLiAqLworCXN1Ymxpc3QgPSBnZXRfc3Vic2NyaXB0aW9uX2xpc3Qo KTsKKwlmb3JlYWNoKGxjLCBzdWJsaXN0KQorCXsKKwkJU3Vic2NyaXB0aW9uICpzdWIgPSAo U3Vic2NyaXB0aW9uICopIGxmaXJzdChsYyk7CisJCUxvZ2ljYWxSZXBXb3JrZXIgKnc7CisJ CVRpbWVzdGFtcFR6IGxhc3Rfc3RhcnQ7CisJCVRpbWVzdGFtcFR6IG5vdzsKKwkJbG9uZwkJ ZWxhcHNlZDsKKworCQlpZiAoIXN1Yi0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCUxX TG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisJCXcgPSBs b2dpY2FscmVwX3dvcmtlcl9maW5kKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIEludmFsaWRPaWQs IGZhbHNlKTsKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisKKwkJ aWYgKHcgIT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJLyogd29ya2VyIGlzIHJ1bm5pbmcgYWxy ZWFkeSAqLworCisJCS8qCisJCSAqIElmIHRoZSB3b3JrZXIgaXMgZWxpZ2libGUgdG8gc3Rh cnQgbm93LCBsYXVuY2ggaXQuICBPdGhlcndpc2UsCisJCSAqIGFkanVzdCB3YWl0X3RpbWUg c28gdGhhdCB3ZSdsbCB3YWtlIHVwIGFzIHNvb24gYXMgaXQgY2FuIGJlCisJCSAqIHN0YXJ0 ZWQuCisJCSAqCisJCSAqIEVhY2ggc3Vic2NyaXB0aW9uJ3MgYXBwbHkgd29ya2VyIGNhbiBv bmx5IGJlIHJlc3RhcnRlZCBvbmNlIHBlcgorCQkgKiB3YWxfcmV0cmlldmVfcmV0cnlfaW50 ZXJ2YWwsIHNvIHRoYXQgZXJyb3JzIGRvIG5vdCBjYXVzZSB1cyB0bworCQkgKiByZXBlYXRl ZGx5IHJlc3RhcnQgdGhlIHdvcmtlciBhcyBmYXN0IGFzIHBvc3NpYmxlLiAgSW4gY2FzZXMK KwkJICogd2hlcmUgYSByZXN0YXJ0IGlzIGV4cGVjdGVkIChlLmcuLCBzdWJzY3JpcHRpb24g cGFyYW1ldGVyCisJCSAqIGNoYW5nZXMpLCBhbm90aGVyIHByb2Nlc3Mgc2hvdWxkIHJlbW92 ZSB0aGUgbGFzdC1zdGFydCBlbnRyeQorCQkgKiBmb3IgdGhlIHN1YnNjcmlwdGlvbiBzbyB0 aGF0IHRoZSB3b3JrZXIgY2FuIGJlIHJlc3RhcnRlZAorCQkgKiB3aXRob3V0IHdhaXRpbmcg Zm9yIHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCB0byBlbGFwc2UuCisJCSAqLworCQls YXN0X3N0YXJ0ID0gQXBwbHlMYXVuY2hlckdldFdvcmtlclN0YXJ0VGltZShzdWItPm9pZCk7 CisJCW5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwkJaWYgKGxhc3Rfc3RhcnQgPT0g MCB8fAorCQkJKGVsYXBzZWQgPSBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKGxh c3Rfc3RhcnQsIG5vdykpID49IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCkKKwkJewor CQkJQXBwbHlMYXVuY2hlclNldFdvcmtlclN0YXJ0VGltZShzdWItPm9pZCwgbm93KTsKKwkJ CWxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChzdWItPmRiaWQsIHN1Yi0+b2lkLCBzdWItPm5h bWUsCisJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCSBEU01f SEFORExFX0lOVkFMSUQpOworCQl9CisJCWVsc2UKKwkJeworCQkJKndhaXRfdGltZSA9IE1p bigqd2FpdF90aW1lLAorCQkJCQkJCXdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCAtIGVs YXBzZWQpOworCQl9CisJfQorCisJLyogU3dpdGNoIGJhY2sgdG8gb3JpZ2luYWwgbWVtb3J5 IGNvbnRleHQuICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJLyogQ2xl YW4gdGhlIHRlbXBvcmFyeSBtZW1vcnkuICovCisJTWVtb3J5Q29udGV4dERlbGV0ZShzdWJj dHgpOworfQorCiAvKgogICogTWFpbiBsb29wIGZvciB0aGUgYXBwbHkgbGF1bmNoZXIgcHJv Y2Vzcy4KICAqLwpAQCAtMTA5Niw3OCArMTI1OSwyMCBAQCBBcHBseUxhdW5jaGVyTWFpbihE YXR1bSBtYWluX2FyZykKIAkgKi8KIAlCYWNrZ3JvdW5kV29ya2VySW5pdGlhbGl6ZUNvbm5l Y3Rpb24oTlVMTCwgTlVMTCwgMCk7CiAKKwlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2ZXIi LCBmYWxzZSk7CisKIAkvKiBFbnRlciBtYWluIGxvb3AgKi8KIAlmb3IgKDs7KQogCXsKIAkJ aW50CQkJcmM7Ci0JCUxpc3QJICAgKnN1Ymxpc3Q7Ci0JCUxpc3RDZWxsICAgKmxjOwotCQlN ZW1vcnlDb250ZXh0IHN1YmN0eDsKLQkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CiAJCWxvbmcJ CXdhaXRfdGltZSA9IERFRkFVTFRfTkFQVElNRV9QRVJfQ1lDTEU7CiAKIAkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKIAotCQkvKiBVc2UgdGVtcG9yYXJ5IGNvbnRleHQgdG8gYXZvaWQg bGVha2luZyBtZW1vcnkgYWNyb3NzIGN5Y2xlcy4gKi8KLQkJc3ViY3R4ID0gQWxsb2NTZXRD b250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCi0JCQkJCQkJCQkgICAiTG9naWNhbCBS ZXBsaWNhdGlvbiBMYXVuY2hlciBzdWJsaXN0IiwKLQkJCQkJCQkJCSAgIEFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOwotCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3ViY3R4 KTsKLQotCQkvKiBTdGFydCBhbnkgbWlzc2luZyB3b3JrZXJzIGZvciBlbmFibGVkIHN1YnNj cmlwdGlvbnMuICovCi0JCXN1Ymxpc3QgPSBnZXRfc3Vic2NyaXB0aW9uX2xpc3QoKTsKLQkJ Zm9yZWFjaChsYywgc3VibGlzdCkKLQkJewotCQkJU3Vic2NyaXB0aW9uICpzdWIgPSAoU3Vi c2NyaXB0aW9uICopIGxmaXJzdChsYyk7Ci0JCQlMb2dpY2FsUmVwV29ya2VyICp3OwotCQkJ VGltZXN0YW1wVHogbGFzdF9zdGFydDsKLQkJCVRpbWVzdGFtcFR6IG5vdzsKLQkJCWxvbmcJ CWVsYXBzZWQ7Ci0KLQkJCWlmICghc3ViLT5lbmFibGVkKQotCQkJCWNvbnRpbnVlOwotCi0J CQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwotCQkJ dyA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoc3ViLT5vaWQsIEludmFsaWRPaWQsIGZhbHNl KTsKLQkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwotCi0JCQlpZiAo dyAhPSBOVUxMKQotCQkJCWNvbnRpbnVlOwkJLyogd29ya2VyIGlzIHJ1bm5pbmcgYWxyZWFk eSAqLwotCi0JCQkvKgotCQkJICogSWYgdGhlIHdvcmtlciBpcyBlbGlnaWJsZSB0byBzdGFy dCBub3csIGxhdW5jaCBpdC4gIE90aGVyd2lzZSwKLQkJCSAqIGFkanVzdCB3YWl0X3RpbWUg c28gdGhhdCB3ZSdsbCB3YWtlIHVwIGFzIHNvb24gYXMgaXQgY2FuIGJlCi0JCQkgKiBzdGFy dGVkLgotCQkJICoKLQkJCSAqIEVhY2ggc3Vic2NyaXB0aW9uJ3MgYXBwbHkgd29ya2VyIGNh biBvbmx5IGJlIHJlc3RhcnRlZCBvbmNlIHBlcgotCQkJICogd2FsX3JldHJpZXZlX3JldHJ5 X2ludGVydmFsLCBzbyB0aGF0IGVycm9ycyBkbyBub3QgY2F1c2UgdXMgdG8KLQkJCSAqIHJl cGVhdGVkbHkgcmVzdGFydCB0aGUgd29ya2VyIGFzIGZhc3QgYXMgcG9zc2libGUuICBJbiBj YXNlcwotCQkJICogd2hlcmUgYSByZXN0YXJ0IGlzIGV4cGVjdGVkIChlLmcuLCBzdWJzY3Jp cHRpb24gcGFyYW1ldGVyCi0JCQkgKiBjaGFuZ2VzKSwgYW5vdGhlciBwcm9jZXNzIHNob3Vs ZCByZW1vdmUgdGhlIGxhc3Qtc3RhcnQgZW50cnkKLQkJCSAqIGZvciB0aGUgc3Vic2NyaXB0 aW9uIHNvIHRoYXQgdGhlIHdvcmtlciBjYW4gYmUgcmVzdGFydGVkCi0JCQkgKiB3aXRob3V0 IHdhaXRpbmcgZm9yIHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCB0byBlbGFwc2UuCi0J CQkgKi8KLQkJCWxhc3Rfc3RhcnQgPSBBcHBseUxhdW5jaGVyR2V0V29ya2VyU3RhcnRUaW1l KHN1Yi0+b2lkKTsKLQkJCW5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLQkJCWlmIChs YXN0X3N0YXJ0ID09IDAgfHwKLQkJCQkoZWxhcHNlZCA9IFRpbWVzdGFtcERpZmZlcmVuY2VN aWxsaXNlY29uZHMobGFzdF9zdGFydCwgbm93KSkgPj0gd2FsX3JldHJpZXZlX3JldHJ5X2lu dGVydmFsKQotCQkJewotCQkJCUFwcGx5TGF1bmNoZXJTZXRXb3JrZXJTdGFydFRpbWUoc3Vi LT5vaWQsIG5vdyk7Ci0JCQkJbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKHN1Yi0+ZGJpZCwg c3ViLT5vaWQsIHN1Yi0+bmFtZSwKLQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9p ZCwKLQkJCQkJCQkJCQkgRFNNX0hBTkRMRV9JTlZBTElEKTsKLQkJCX0KLQkJCWVsc2UKLQkJ CXsKLQkJCQl3YWl0X3RpbWUgPSBNaW4od2FpdF90aW1lLAotCQkJCQkJCQl3YWxfcmV0cmll dmVfcmV0cnlfaW50ZXJ2YWwgLSBlbGFwc2VkKTsKLQkJCX0KLQkJfQotCi0JCS8qIFN3aXRj aCBiYWNrIHRvIG9yaWdpbmFsIG1lbW9yeSBjb250ZXh0LiAqLwotCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKLQkJLyogQ2xlYW4gdGhlIHRlbXBvcmFyeSBtZW1vcnkuICov Ci0JCU1lbW9yeUNvbnRleHREZWxldGUoc3ViY3R4KTsKKwkJaWYgKCFSZWNvdmVyeUluUHJv Z3Jlc3MoKSkKKwkJCUFwcGx5TGF1bmNoZXJTdGFydFN1YnMoJndhaXRfdGltZSk7CisJCWVs c2UKKwkJCUFwcGx5TGF1bmNoZXJTdGFydFNsb3RTeW5jKCZ3YWl0X3RpbWUpOwogCiAJCS8q IFdhaXQgZm9yIG1vcmUgd29yay4gKi8KIAkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCmluZGV4IGQ0 OGNkNGM1OTAuLjllNTJlYzQyMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBiYWNrZW5kX3NvdXJjZXMg Kz0gZmlsZXMoCiAgICdwcm90by5jJywKICAgJ3JlbGF0aW9uLmMnLAogICAncmVvcmRlcmJ1 ZmZlci5jJywKKyAgJ3Nsb3RzeW5jLmMnLAogICAnc25hcGJ1aWxkLmMnLAogICAndGFibGVz eW5jLmMnLAogICAnd29ya2VyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA5ZjQ0OTc0NDczLi4xNTE5YjBlYzY0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJi dWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJi dWZmZXIuYwpAQCAtOTUsMTEgKzk1LDE0IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3NuYXBidWlsZC5oIgkvKiBqdXN0IGZvciBTbmFw QnVpbGRTbmFwRGVjUmVmY291bnQgKi8KICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbC5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvY29tYm9jaWQu aCIKQEAgLTEwNyw2ICsxMTAsNyBAQAogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsZmlsZW51bWJlcm1h cC5oIgorI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIAogCiAvKiBlbnRyeSBmb3IgYSBo YXNoIHRhYmxlIHdlIHVzZSB0byBtYXAgZnJvbSB4aWQgdG8gb3VyIHRyYW5zYWN0aW9uIHN0 YXRlICovCkBAIC0yMDUzLDYgKzIwNTcsODUgQEAgUmVvcmRlckJ1ZmZlclJlc2V0VFhOKFJl b3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJfQogfQogCitzdGF0 aWMgdm9pZAord2FpdF9mb3Jfc3RhbmRieV9jb25maXJtYXRpb24oWExvZ1JlY1B0ciBjb21t aXRfbHNuKQoreworCWNoYXIJICAgKnJhd25hbWU7CisJTGlzdAkgICAqbmFtZWxpc3Q7CisJ TGlzdENlbGwgICAqbGM7CisJWExvZ1JlY1B0cglmbHVzaF9wb3MgPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKKworCWlmIChzdHJjbXAoc3RhbmRieV9zbG90X25hbWVzLCAiIikgPT0gMCkKKwkJ cmV0dXJuOworCisJcmF3bmFtZSA9IHBzdHJkdXAoc3RhbmRieV9zbG90X25hbWVzKTsKKwlT cGxpdElkZW50aWZpZXJTdHJpbmcocmF3bmFtZSwgJywnLCAmbmFtZWxpc3QpOworCisJd2hp bGUgKHRydWUpCisJeworCQlpbnQJCQl3YWl0X3Nsb3RzX3JlbWFpbmluZzsKKwkJWExvZ1Jl Y1B0cglvbGRlc3RfZmx1c2hfcG9zID0gSW52YWxpZFhMb2dSZWNQdHI7CisJCWludAkJCXJj OworCisJCXdhaXRfc2xvdHNfcmVtYWluaW5nID0gbGlzdF9sZW5ndGgobmFtZWxpc3QpOwor CisJCUxXTG9ja0FjcXVpcmUoUmVwbGljYXRpb25TbG90Q29udHJvbExvY2ssIExXX1NIQVJF RCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOyBpKysp CisJCXsKKwkJCVJlcGxpY2F0aW9uU2xvdCAqcyA9ICZSZXBsaWNhdGlvblNsb3RDdGwtPnJl cGxpY2F0aW9uX3Nsb3RzW2ldOworCQkJYm9vbAkJaW5saXN0OworCisJCQlpZiAoIXMtPmlu X3VzZSkKKwkJCQljb250aW51ZTsKKworCQkJaW5saXN0ID0gZmFsc2U7CisJCQlmb3JlYWNo IChsYywgbmFtZWxpc3QpCisJCQl7CisJCQkJY2hhciAqbmFtZSA9IGxmaXJzdChsYyk7CisJ CQkJaWYgKHN0cmNtcChuYW1lLCBOYW1lU3RyKHMtPmRhdGEubmFtZSkpID09IDApCisJCQkJ eworCQkJCQlpbmxpc3QgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlp ZiAoIWlubGlzdCkKKwkJCQljb250aW51ZTsKKworCQkJU3BpbkxvY2tBY3F1aXJlKCZzLT5t dXRleCk7CisKKwkJCWlmIChzLT5kYXRhLmRhdGFiYXNlID09IEludmFsaWRPaWQpCisJCQkJ LyogUGh5c2ljYWwgc2xvdHMgYWR2YW5jZSByZXN0YXJ0X2xzbiBvbiBmbHVzaCBhbmQgaWdu b3JlIGNvbmZpcm1lZF9mbHVzaF9sc24gKi8KKwkJCQlmbHVzaF9wb3MgPSBzLT5kYXRhLnJl c3RhcnRfbHNuOworCQkJZWxzZQorCQkJCS8qIEZvciBsb2dpY2FsIHNsb3RzIHdlIG11c3Qg d2FpdCBmb3IgY29tbWl0IGFuZCBmbHVzaCAqLworCQkJCWZsdXNoX3BvcyA9IHMtPmRhdGEu Y29uZmlybWVkX2ZsdXNoOworCisJCQlTcGluTG9ja1JlbGVhc2UoJnMtPm11dGV4KTsKKwor CQkJLyogV2Ugd2FudCB0byBmaW5kIG91dCB0aGUgbWluKGZsdXNoIHBvcykgb3ZlciBhbGwg bmFtZWQgc2xvdHMgKi8KKwkJCWlmIChvbGRlc3RfZmx1c2hfcG9zID09IEludmFsaWRYTG9n UmVjUHRyCisJCQkJfHwgb2xkZXN0X2ZsdXNoX3BvcyA+IGZsdXNoX3BvcykKKwkJCQlvbGRl c3RfZmx1c2hfcG9zID0gZmx1c2hfcG9zOworCisJCQlpZiAoZmx1c2hfcG9zID49IGNvbW1p dF9sc24gJiYgd2FpdF9zbG90c19yZW1haW5pbmcgPiAwKQorCQkJCXdhaXRfc2xvdHNfcmVt YWluaW5nIC0tOworCQl9CisJCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25TbG90Q29udHJv bExvY2spOworCisJCWlmICh3YWl0X3Nsb3RzX3JlbWFpbmluZyA9PSAwKQorCQkJcmV0dXJu OworCisJCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCSAgIFdMX0xBVENIX1NFVCB8 IFdMX1RJTUVPVVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRILAorCQkJCQkgICAxMDAwTCwgUEdf V0FJVF9FWFRFTlNJT04pOworCisJCWlmIChyYyAmIFdMX1BPU1RNQVNURVJfREVBVEgpCisJ CQlwcm9jX2V4aXQoMSk7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwl9Cit9CisK IC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJSZXBsYXkgYW5kIFJl b3JkZXJCdWZmZXJTdHJlYW1UWE4uCiAgKgpAQCAtMjUwMiw2ICsyNTg1LDkgQEAgUmVvcmRl ckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAkJCSAqIENhbGwgZWl0aGVyIFBSRVBBUkUgKGZvciB0d28tcGhhc2UgdHJhbnNh Y3Rpb25zKSBvciBDT01NSVQgKGZvcgogCQkJICogcmVndWxhciBvbmVzKS4KIAkJCSAqLwor CisJCQl3YWl0X2Zvcl9zdGFuZGJ5X2NvbmZpcm1hdGlvbihjb21taXRfbHNuKTsKKwogCQkJ aWYgKHJidHhuX3ByZXBhcmVkKHR4bikpCiAJCQkJcmItPnByZXBhcmUocmIsIHR4biwgY29t bWl0X2xzbik7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Nsb3RzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Nsb3RzeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTI5 ZGRiMjFhZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvc2xvdHN5bmMuYwpAQCAtMCwwICsxLDQxMyBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKiBzbG90c3luYy5jCisgKgkgICBQb3N0Z3JlU1FMIHdvcmtlciBmb3Igc3luY2hy b25pemluZyBzbG90cyB0byBhIHN0YW5kYnkgZnJvbSBwcmltYXJ5CisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMTgsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9zbG90c3luYy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kcy5o IgorI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v d2FscmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2Fy cmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9w Z19sc24uaCIKKyNpbmNsdWRlICJ1dGlscy92YXJsZW5hLmgiCisKK2NoYXIJICAgKnN5bmNo cm9uaXplX3Nsb3RfbmFtZXM7CitjaGFyCSAgICpzdGFuZGJ5X3Nsb3RfbmFtZXM7CisKKy8q CisgKiBXYWl0IGZvciByZW1vdGUgc2xvdCB0byBwYXNzIGxvY2FseSByZXNlcnZlZCBwb3Np dGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3dhaXRfZm9yX3ByaW1hcnlfc2xvdF9jYXRjaHVw KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBjaGFyICpzbG90X25hbWUsCisJCQkJCQkJICBY TG9nUmVjUHRyIG1pbl9sc24pCit7CisJV2FsUmN2RXhlY1Jlc3VsdCAqcmVzOworCVR1cGxl VGFibGVTbG90ICpzbG90OworCU9pZAkJCXNsb3RSb3dbMV0gPSB7TFNOT0lEfTsKKwlTdHJp bmdJbmZvRGF0YSBjbWQ7CisJYm9vbAkJaXNudWxsOworCVhMb2dSZWNQdHIJcmVzdGFydF9s c247CisKKwlmb3IgKDs7KQorCXsKKwkJaW50CQkJcmM7CisKKwkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKworCQlpbml0U3RyaW5nSW5mbygmY21kKTsKKwkJYXBwZW5kU3RyaW5nSW5m bygmY21kLAorCQkJCQkJICJTRUxFQ1QgcmVzdGFydF9sc24iCisJCQkJCQkgIiAgRlJPTSBw Z19jYXRhbG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzIgorCQkJCQkJICIgV0hFUkUgc2xvdF9u YW1lID0gJXMiLAorCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihzbG90X25hbWUpKTsKKwkJ cmVzID0gd2FscmN2X2V4ZWMod3Jjb25uLCBjbWQuZGF0YSwgMSwgc2xvdFJvdyk7CisKKwkJ aWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZmV0Y2ggc2xvdCBpbmZvIGZvciBzbG90IFwi JXNcIiBmcm9tIHByaW1hcnk6ICVzIiwKKwkJCQkJCQlzbG90X25hbWUsIHJlcy0+ZXJyKSkp OworCisJCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocmVzLT50dXBsZWRlc2Ms ICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCQlpZiAoIXR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90 KHJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycm1zZygic2xvdCBcIiVzXCIgZGlzYXBlYXJlZCBmcm9tIHByb3ZpZGVy IiwKKwkJCQkJCQlzbG90X25hbWUpKSk7CisKKwkJcmVzdGFydF9sc24gPSBEYXR1bUdldExT TihzbG90X2dldGF0dHIoc2xvdCwgMSwgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlzbnVsbCk7 CisKKwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVz KTsKKworCQlpZiAocmVzdGFydF9sc24gPj0gbWluX2xzbikKKwkJCWJyZWFrOworCisJCXJj ID0gV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVP VVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRILAorCQkJCQkgICB3YWxfcmV0cmlldmVfcmV0cnlf aW50ZXJ2YWwsCisJCQkJCSAgIFdBSVRfRVZFTlRfUkVQTF9TTE9UX1NZTkNfTUFJTik7CisK KwkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKworCQkvKiBlbWVyZ2VuY3kgYmFpbG91dCBpZiBw b3N0bWFzdGVyIGhhcyBkaWVkICovCisJCWlmIChyYyAmIFdMX1BPU1RNQVNURVJfREVBVEgp CisJCQlwcm9jX2V4aXQoMSk7CisJfQorfQorCisvKgorICogU3luY2hyb25pemUgc2luZ2xl IHNsb3QgdG8gZ2l2ZW4gcG9zaXRpb24uCisgKgorICogVGhpcyBvcHRpb25hbGx5IGNyZWF0 ZXMgbmV3IHNsb3QgaWYgdGhlcmUgaXMgbm8gZXhpc3Rpbmcgb25lLgorICovCitzdGF0aWMg dm9pZAorc3luY2hyb25pemVfb25lX3Nsb3QoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIGNo YXIgKnNsb3RfbmFtZSwgY2hhciAqZGF0YWJhc2UsCisJCQkJCSBjaGFyICpwbHVnaW5fbmFt ZSwgWExvZ1JlY1B0ciB0YXJnZXRfbHNuKQoreworCWJvb2wJCWZvdW5kID0gZmFsc2U7CisJ WExvZ1JlY1B0cgllbmRsc247CisKKwkvKiBTZWFyY2ggZm9yIHRoZSBuYW1lZCBzbG90IGFu ZCBtYXJrIGl0IGFjdGl2ZSBpZiB3ZSBmaW5kIGl0LiAqLworCUxXTG9ja0FjcXVpcmUoUmVw bGljYXRpb25TbG90Q29udHJvbExvY2ssIExXX1NIQVJFRCk7CisJZm9yIChpbnQgaSA9IDA7 IGkgPCBtYXhfcmVwbGljYXRpb25fc2xvdHM7IGkrKykKKwl7CisJCVJlcGxpY2F0aW9uU2xv dCAqcyA9ICZSZXBsaWNhdGlvblNsb3RDdGwtPnJlcGxpY2F0aW9uX3Nsb3RzW2ldOworCisJ CWlmICghcy0+aW5fdXNlKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0cmNtcChOYW1lU3Ry KHMtPmRhdGEubmFtZSksIHNsb3RfbmFtZSkgPT0gMCkKKwkJeworCQkJZm91bmQgPSB0cnVl OworCQkJYnJlYWs7CisJCX0KKwl9CisJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvblNsb3RD b250cm9sTG9jayk7CisKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyogQWxy ZWFkeSBleGlzdGluZyBzbG90LCBhY3F1aXJlICovCisJaWYgKGZvdW5kKQorCXsKKwkJUmVw bGljYXRpb25TbG90QWNxdWlyZShzbG90X25hbWUsIHRydWUpOworCisJCWlmICh0YXJnZXRf bHNuIDwgTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEuY29uZmlybWVkX2ZsdXNoKQorCQl7CisJ CQllbG9nKERFQlVHMSwKKwkJCQkgIm5vdCBzeW5jaHJvbml6aW5nIHNsb3QgJXM7IHN5bmNo cm9uaXphdGlvbiB3b3VsZCBtb3ZlIGl0IGJhY2t3YXJkIiwKKwkJCQkgc2xvdF9uYW1lKTsK KworCQkJUmVwbGljYXRpb25TbG90UmVsZWFzZSgpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJLyogT3RoZXJ3aXNlIGNyZWF0ZSB0 aGUgc2xvdCBmaXJzdC4gKi8KKwllbHNlCisJeworCQlUcmFuc2FjdGlvbklkIHhtaW5faG9y aXpvbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCQlSZXBsaWNhdGlvblNsb3QgKnNsb3Q7 CisKKwkJUmVwbGljYXRpb25TbG90Q3JlYXRlKHNsb3RfbmFtZSwgdHJ1ZSwgUlNfRVBIRU1F UkFMLCBmYWxzZSk7CisJCXNsb3QgPSBNeVJlcGxpY2F0aW9uU2xvdDsKKworCQlTcGluTG9j a0FjcXVpcmUoJnNsb3QtPm11dGV4KTsKKwkJc2xvdC0+ZGF0YS5kYXRhYmFzZSA9IGdldF9k YXRhYmFzZV9vaWQoZGF0YWJhc2UsIGZhbHNlKTsKKwkJbmFtZXN0cmNweSgmc2xvdC0+ZGF0 YS5wbHVnaW4sIHBsdWdpbl9uYW1lKTsKKwkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5tdXRl eCk7CisKKwkJUmVwbGljYXRpb25TbG90UmVzZXJ2ZVdhbCgpOworCisJCUxXTG9ja0FjcXVp cmUoUHJvY0FycmF5TG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJeG1pbl9ob3Jpem9uID0gR2V0 T2xkZXN0U2FmZURlY29kaW5nVHJhbnNhY3Rpb25JZCh0cnVlKTsKKwkJc2xvdC0+ZWZmZWN0 aXZlX2NhdGFsb2dfeG1pbiA9IHhtaW5faG9yaXpvbjsKKwkJc2xvdC0+ZGF0YS5jYXRhbG9n X3htaW4gPSB4bWluX2hvcml6b247CisJCVJlcGxpY2F0aW9uU2xvdHNDb21wdXRlUmVxdWly ZWRYbWluKHRydWUpOworCQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOworCisJCWlm ICh0YXJnZXRfbHNuIDwgTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEucmVzdGFydF9sc24pCisJ CXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQllcnJtc2coIndhaXRpbmcgZm9yIHJlbW90ZSBz bG90IFwiJXNcIiBMU04gKCVYLyVYKSB0byBwYXNzIGxvY2FsIHNsb3QgTFNOICglWC8lWCki LAorCQkJCQkJICAgc2xvdF9uYW1lLAorCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKHRhcmdl dF9sc24pLCBMU05fRk9STUFUX0FSR1MoTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEucmVzdGFy dF9sc24pKSk7CisKKwkJCXdhaXRfZm9yX3ByaW1hcnlfc2xvdF9jYXRjaHVwKHdyY29ubiwg c2xvdF9uYW1lLAorCQkJCQkJCQkJCSAgTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEucmVzdGFy dF9sc24pOworCQl9CisKKwkJUmVwbGljYXRpb25TbG90UGVyc2lzdCgpOworCX0KKworCWVu ZGxzbiA9IHBnX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdF9hZHZhbmNlKHRhcmdldF9sc24p OworCisJZWxvZyhERUJVRzMsICJzeW5jaHJvbml6ZWQgc2xvdCAlcyB0byBsc24gKCVYLyVY KSIsCisJCSBzbG90X25hbWUsIExTTl9GT1JNQVRfQVJHUyhlbmRsc24pKTsKKworCVJlcGxp Y2F0aW9uU2xvdFJlbGVhc2UoKTsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKK30K Kworc3RhdGljIHZvaWQKK3N5bmNocm9uaXplX3Nsb3RzKHZvaWQpCit7CisJV2FsUmN2RXhl Y1Jlc3VsdCAqcmVzOworCVdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uID0gTlVMTDsKKwlUdXBs ZVRhYmxlU2xvdCAqc2xvdDsKKwlPaWQJCQlzbG90Um93WzNdID0ge1RFWFRPSUQsIFRFWFRP SUQsIExTTk9JRH07CisJU3RyaW5nSW5mb0RhdGEgczsKKwljaGFyCSAgICpkYXRhYmFzZTsK KwljaGFyCSAgICplcnI7CisJTWVtb3J5Q29udGV4dCBvbGRjdHggPSBDdXJyZW50TWVtb3J5 Q29udGV4dDsKKworCWlmICghV2FsUmN2KQorCQlyZXR1cm47CisKKwkvKiBzeXNjYWNoZSBh Y2Nlc3MgbmVlZHMgYSB0cmFuc2FjdGlvbiBlbnYuICovCisJU3RhcnRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKwkvKiBtYWtlIGRibmFtZSBsaXZlIG91dHNpZGUgVFggY29udGV4dCAqLwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCisJZGF0YWJhc2UgPSBnZXRfZGF0 YWJhc2VfbmFtZShNeURhdGFiYXNlSWQpOworCWluaXRTdHJpbmdJbmZvKCZzKTsKKwlhcHBl bmRTdHJpbmdJbmZvKCZzLCAiJXMgZGJuYW1lPSVzIiwgUHJpbWFyeUNvbm5JbmZvLCBkYXRh YmFzZSk7CisJd3Jjb25uID0gd2FscmN2X2Nvbm5lY3Qocy5kYXRhLCB0cnVlLCBmYWxzZSwg InNsb3Rfc3luYyIsICZlcnIpOworCisJaWYgKHdyY29ubiA9PSBOVUxMKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBwcmltYXJ5 IHNlcnZlcjogJXMiLCBlcnIpKSk7CisKKwlyZXNldFN0cmluZ0luZm8oJnMpOworCWFwcGVu ZFN0cmluZ0luZm8oJnMsCisJCQkJCSAiU0VMRUNUIHNsb3RfbmFtZSwgcGx1Z2luLCBjb25m aXJtZWRfZmx1c2hfbHNuIgorCQkJCQkgIiAgRlJPTSBwZ19jYXRhbG9nLnBnX3JlcGxpY2F0 aW9uX3Nsb3RzIgorCQkJCQkgIiBXSEVSRSBkYXRhYmFzZSA9ICVzIiwKKwkJCQkJIHF1b3Rl X2xpdGVyYWxfY3N0cihkYXRhYmFzZSkpOworCWlmIChzdHJjbXAoc3luY2hyb25pemVfc2xv dF9uYW1lcywgIiIpICE9IDAgJiYgc3RyY21wKHN5bmNocm9uaXplX3Nsb3RfbmFtZXMsICIq IikgIT0gMCkKKwl7CisJCWNoYXIJICAgKnJhd25hbWU7CisJCUxpc3QJICAgKm5hbWVsaXN0 OworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlyYXduYW1lID0gcHN0cmR1cChzeW5jaHJvbml6 ZV9zbG90X25hbWVzKTsKKwkJU3BsaXRJZGVudGlmaWVyU3RyaW5nKHJhd25hbWUsICcsJywg Jm5hbWVsaXN0KTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzLCAiIEFORCBzbG90 X25hbWUgSU4gKCIpOworCQlmb3JlYWNoIChsYywgbmFtZWxpc3QpCisJCXsKKwkJCWlmIChs YyAhPSBsaXN0X2hlYWQobmFtZWxpc3QpKQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZz LCAnLCcpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmcywgIiVzIiwKKwkJCQkJCQkgcXVvdGVf bGl0ZXJhbF9jc3RyKGxmaXJzdChsYykpKTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmcywgJyknKTsKKwl9CisKKwlyZXMgPSB3YWxyY3ZfZXhlYyh3cmNvbm4sIHMuZGF0YSwg Mywgc2xvdFJvdyk7CisJcGZyZWUocy5kYXRhKTsKKworCWlmIChyZXMtPnN0YXR1cyAhPSBX QUxSQ1ZfT0tfVFVQTEVTKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxk IG5vdCBmZXRjaCBzbG90IGluZm8gZnJvbSBwcmltYXJ5OiAlcyIsCisJCQkJCQlyZXMtPmVy cikpKTsKKworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCS8qIENvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCBzd2l0Y2hlcyB0byBUb3BNZW1vcnlDb250ZXh0ICovCisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisKKwlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFi bGVTbG90KHJlcy0+dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwl3aGlsZSAo dHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwg c2xvdCkpCisJeworCQljaGFyCSAgICpzbG90X25hbWU7CisJCWNoYXIJICAgKnBsdWdpbl9u YW1lOworCQlYTG9nUmVjUHRyCWNvbmZpcm1lZF9mbHVzaF9sc247CisJCWJvb2wJCWlzbnVs bDsKKworCQlzbG90X25hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihz bG90LCAxLCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQlwbHVnaW5fbmFt ZSA9IFRleHREYXR1bUdldENTdHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251bGwp KTsKKwkJQXNzZXJ0KCFpc251bGwpOworCisJCWNvbmZpcm1lZF9mbHVzaF9sc24gPSBEYXR1 bUdldExTTihzbG90X2dldGF0dHIoc2xvdCwgMywgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlz bnVsbCk7CisKKwkJc3luY2hyb25pemVfb25lX3Nsb3Qod3Jjb25uLCBzbG90X25hbWUsIGRh dGFiYXNlLCBwbHVnaW5fbmFtZSwKKwkJCQkJCQkgY29uZmlybWVkX2ZsdXNoX2xzbik7CisK KwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJfQorCisJd2FscmN2X2NsZWFyX3Jlc3VsdChy ZXMpOworCXBmcmVlKGRhdGFiYXNlKTsKKworCXdhbHJjdl9kaXNjb25uZWN0KHdyY29ubik7 Cit9CisKKy8qCisgKiBUaGUgbWFpbiBsb29wIG9mIG91ciB3b3JrZXIgcHJvY2Vzcy4KKyAq Lwordm9pZAorUmVwbFNsb3RTeW5jTWFpbihEYXR1bSBtYWluX2FyZykKK3sKKwlpbnQJCQl3 b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIobWFpbl9hcmcpOworCisJLyogQXR0YWNoIHRv IHNsb3QgKi8KKwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOworCisJ LyogRXN0YWJsaXNoIHNpZ25hbCBoYW5kbGVycy4gKi8KKwlCYWNrZ3JvdW5kV29ya2VyVW5i bG9ja1NpZ25hbHMoKTsKKworCS8qIExvYWQgdGhlIGxpYnBxLXNwZWNpZmljIGZ1bmN0aW9u cyAqLworCWxvYWRfZmlsZSgibGlicHF3YWxyZWNlaXZlciIsIGZhbHNlKTsKKworCS8qIENv bm5lY3QgdG8gb3VyIGRhdGFiYXNlLiAqLworCUJhY2tncm91bmRXb3JrZXJJbml0aWFsaXpl Q29ubmVjdGlvbkJ5T2lkKE15TG9naWNhbFJlcFdvcmtlci0+ZGJpZCwKKwkJCQkJCQkJCQkJ ICBNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKKwkJCQkJCQkJCQkJICAwKTsKKworCVN0 YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJy ZXBsaWNhdGlvbiBzbG90IHN5bmNocm9uaXphdGlvbiB3b3JrZXIgZm9yIGRhdGFiYXNlIFwi JXNcIiBoYXMgc3RhcnRlZCIsCisJCQkJCWdldF9kYXRhYmFzZV9uYW1lKE15TG9naWNhbFJl cFdvcmtlci0+ZGJpZCkpKSk7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkv KiBNYWluIHdhaXQgbG9vcC4gKi8KKwlmb3IgKDs7KQorCXsKKwkJaW50CQkJcmM7CisKKwkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygp KQorCQkJcmV0dXJuOworCisJCWlmIChzdHJjbXAoc3luY2hyb25pemVfc2xvdF9uYW1lcywg IiIpID09IDApCisJCQlyZXR1cm47CisKKwkJc3luY2hyb25pemVfc2xvdHMoKTsKKworCQly YyA9IFdhaXRMYXRjaChNeUxhdGNoLAorCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9USU1F T1VUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSCwKKwkJCQkJICAgd2FsX3JldHJpZXZlX3JldHJ5 X2ludGVydmFsLAorCQkJCQkgICBXQUlUX0VWRU5UX1JFUExfU0xPVF9TWU5DX01BSU4pOwor CisJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJLyogZW1lcmdlbmN5IGJhaWxvdXQgaWYg cG9zdG1hc3RlciBoYXMgZGllZCAqLworCQlpZiAocmMgJiBXTF9QT1NUTUFTVEVSX0RFQVRI KQorCQkJcHJvY19leGl0KDEpOworCX0KK30KKworLyoKKyAqIFJvdXRpbmVzIGZvciBoYW5k bGluZyB0aGUgR1VDIHZhcmlhYmxlKHMpCisgKi8KKworYm9vbAorY2hlY2tfc3luY2hyb25p emVfc2xvdF9uYW1lcyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBz b3VyY2UpCit7CisJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgIioiIHdoaWNoIG1lYW5zIGFs bC4gKi8KKwlpZiAoc3RyY21wKCpuZXd2YWwsICIqIikgPT0gMCkKKwl7CisJCXJldHVybiB0 cnVlOworCX0KKwllbHNlCisJeworCQljaGFyCSAgICpyYXduYW1lOworCQlMaXN0CSAgICpu YW1lbGlzdDsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyogTmVlZCBhIG1vZGlmaWFibGUg Y29weSBvZiBzdHJpbmcgKi8KKwkJcmF3bmFtZSA9IHBzdHJkdXAoKm5ld3ZhbCk7CisKKwkJ LyogUGFyc2Ugc3RyaW5nIGludG8gbGlzdCBvZiBpZGVudGlmaWVycyAqLworCQlpZiAoIVNw bGl0SWRlbnRpZmllclN0cmluZyhyYXduYW1lLCAnLCcsICZuYW1lbGlzdCkpCisJCXsKKwkJ CS8qIHN5bnRheCBlcnJvciBpbiBuYW1lIGxpc3QgKi8KKwkJCUdVQ19jaGVja19lcnJkZXRh aWwoIkxpc3Qgc3ludGF4IGlzIGludmFsaWQuIik7CisJCQlwZnJlZShyYXduYW1lKTsKKwkJ CWxpc3RfZnJlZShuYW1lbGlzdCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlmb3Jl YWNoKGxjLCBuYW1lbGlzdCkKKwkJeworCQkJY2hhcgkgICAqY3VybmFtZSA9IChjaGFyICop IGxmaXJzdChsYyk7CisKKwkJCVJlcGxpY2F0aW9uU2xvdFZhbGlkYXRlTmFtZShjdXJuYW1l LCBFUlJPUik7CisJCX0KKworCQlwZnJlZShyYXduYW1lKTsKKwkJbGlzdF9mcmVlKG5hbWVs aXN0KTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworCitib29sCitjaGVja19zdGFuZGJ5 X3Nsb3RfbmFtZXMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291 cmNlKQoreworCWNoYXIJICAgKnJhd25hbWU7CisJTGlzdAkgICAqbmFtZWxpc3Q7CisJTGlz dENlbGwgICAqbGM7CisKKwkvKiBOZWVkIGEgbW9kaWZpYWJsZSBjb3B5IG9mIHN0cmluZyAq LworCXJhd25hbWUgPSBwc3RyZHVwKCpuZXd2YWwpOworCisJLyogUGFyc2Ugc3RyaW5nIGlu dG8gbGlzdCBvZiBpZGVudGlmaWVycyAqLworCWlmICghU3BsaXRJZGVudGlmaWVyU3RyaW5n KHJhd25hbWUsICcsJywgJm5hbWVsaXN0KSkKKwl7CisJCS8qIHN5bnRheCBlcnJvciBpbiBu YW1lIGxpc3QgKi8KKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiTGlzdCBzeW50YXggaXMgaW52 YWxpZC4iKTsKKwkJcGZyZWUocmF3bmFtZSk7CisJCWxpc3RfZnJlZShuYW1lbGlzdCk7CisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwlmb3JlYWNoKGxjLCBuYW1lbGlzdCkKKwl7CisJCWNo YXIJICAgKmN1cm5hbWUgPSAoY2hhciAqKSBsZmlyc3QobGMpOworCisJCVJlcGxpY2F0aW9u U2xvdFZhbGlkYXRlTmFtZShjdXJuYW1lLCBFUlJPUik7CisJfQorCisJcGZyZWUocmF3bmFt ZSk7CisJbGlzdF9mcmVlKG5hbWVsaXN0KTsKKworCXJldHVybiB0cnVlOworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXggNmRjZTM1 NTYzMy4uMjMwN2QxODdlNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jCkBAIC0xMDAsNiArMTAwLDcgQEAKICNpbmNsdWRlICJjYXRhbG9n L3BnX3N1YnNjcmlwdGlvbl9yZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIK ICNpbmNsdWRlICJjb21tYW5kcy9jb3B5LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVz L21ha2VmdW5jcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgpAQCAt MTU1LDcgKzE1Niw4IEBAIGZpbmlzaF9zeW5jX3dvcmtlcih2b2lkKQogCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOwogCiAJLyogRmluZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBh bmQgc2lnbmFsIGl0LiAqLwotCWxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCBJbnZhbGlkT2lkKTsKKwlsb2dpY2FscmVwX3dvcmtlcl93YWtl dXAoTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCSBNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN1YmlkLCBJbnZhbGlkT2lkKTsKIAogCS8qIFN0b3AgZ3JhY2VmdWxseSAqLwogCXBy b2NfZXhpdCgwKTsKQEAgLTE5NSw3ICsxOTcsOCBAQCB3YWl0X2Zvcl9yZWxhdGlvbl9zdGF0 ZV9jaGFuZ2UoT2lkIHJlbGlkLCBjaGFyIGV4cGVjdGVkX3N0YXRlKQogCiAJCS8qIENoZWNr IGlmIHRoZSBzeW5jIHdvcmtlciBpcyBzdGlsbCBydW5uaW5nIGFuZCBiYWlsIGlmIG5vdC4g Ki8KIAkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsK LQkJd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCByZWxpZCwKKwkJd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChNeUxv Z2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT5z dWJpZCwgcmVsaWQsCiAJCQkJCQkJCQkJZmFsc2UpOwogCQlMV0xvY2tSZWxlYXNlKExvZ2lj YWxSZXBXb3JrZXJMb2NrKTsKIAkJaWYgKCF3b3JrZXIpCkBAIC0yNDIsNyArMjQ1LDggQEAg d2FpdF9mb3Jfd29ya2VyX3N0YXRlX2NoYW5nZShjaGFyIGV4cGVjdGVkX3N0YXRlKQogCQkg KiB3YWl0aW5nLgogCQkgKi8KIAkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9j aywgTFdfU0hBUkVEKTsKLQkJd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChNeUxv Z2ljYWxSZXBXb3JrZXItPnN1YmlkLAorCQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9m aW5kKE15TG9naWNhbFJlcFdvcmtlci0+ZGJpZCwKKwkJCQkJCQkJCQlNeUxvZ2ljYWxSZXBX b3JrZXItPnN1YmlkLAogCQkJCQkJCQkJCUludmFsaWRPaWQsIGZhbHNlKTsKIAkJaWYgKHdv cmtlciAmJiB3b3JrZXItPnByb2MpCiAJCQlsb2dpY2FscmVwX3dvcmtlcl93YWtldXBfcHRy KHdvcmtlcik7CkBAIC01MDgsNyArNTEyLDggQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19m b3JfYXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIAkJCSAqLwogCQkJTFdMb2NrQWNx dWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKIAotCQkJc3luY3dvcmtl ciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwK KwkJCXN5bmN3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE15TG9naWNhbFJlcFdv cmtlci0+ZGJpZCwKKwkJCQkJCQkJCQkJCU15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsCiAJ CQkJCQkJCQkJCQlyc3RhdGUtPnJlbGlkLCBmYWxzZSk7CiAKIAkJCWlmIChzeW5jd29ya2Vy KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggM2Q1 ODkxMGMxNC4uYjkzNTRiZDAyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCkBAIC0xNjAwLDcgKzE2MDAsOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFt X3N0YXJ0KFN0cmluZ0luZm8gcykKIAkJCQkgKiBTaWduYWwgdGhlIGxlYWRlciBhcHBseSB3 b3JrZXIsIGFzIGl0IG1heSBiZSB3YWl0aW5nIGZvcgogCQkJCSAqIHVzLgogCQkJCSAqLwot CQkJCWxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1Ymlk LCBJbnZhbGlkT2lkKTsKKwkJCQlsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoTXlMb2dpY2Fs UmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCQkJCSBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1Ymlk LCBJbnZhbGlkT2lkKTsKIAkJCX0KIAogCQkJcGFyYWxsZWxfc3RyZWFtX25jaGFuZ2VzID0g MDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3JhbS55IGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9ncmFtLnkKaW5kZXggMGM4NzRlMzNjZi4u MTJhNGI3NDM2OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9n cmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9ncmFtLnkKQEAgLTc2 LDExICs3NiwxMiBAQCBOb2RlICpyZXBsaWNhdGlvbl9wYXJzZV9yZXN1bHQ7CiAldG9rZW4g S19FWFBPUlRfU05BUFNIT1QKICV0b2tlbiBLX05PRVhQT1JUX1NOQVBTSE9UCiAldG9rZW4g S19VU0VfU05BUFNIT1QKKyV0b2tlbiBLX0xJU1RfU0xPVFMKIAogJXR5cGUgPG5vZGU+CWNv bW1hbmQKICV0eXBlIDxub2RlPgliYXNlX2JhY2t1cCBzdGFydF9yZXBsaWNhdGlvbiBzdGFy dF9sb2dpY2FsX3JlcGxpY2F0aW9uCiAJCQkJY3JlYXRlX3JlcGxpY2F0aW9uX3Nsb3QgZHJv cF9yZXBsaWNhdGlvbl9zbG90IGlkZW50aWZ5X3N5c3RlbQotCQkJCXJlYWRfcmVwbGljYXRp b25fc2xvdCB0aW1lbGluZV9oaXN0b3J5IHNob3cKKwkJCQlyZWFkX3JlcGxpY2F0aW9uX3Ns b3QgdGltZWxpbmVfaGlzdG9yeSBzaG93IGxpc3Rfc2xvdHMKICV0eXBlIDxsaXN0PglnZW5l cmljX29wdGlvbl9saXN0CiAldHlwZSA8ZGVmZWx0PglnZW5lcmljX29wdGlvbgogJXR5cGUg PHVpbnR2YWw+CW9wdF90aW1lbGluZQpAQCAtOTEsNiArOTIsNyBAQCBOb2RlICpyZXBsaWNh dGlvbl9wYXJzZV9yZXN1bHQ7CiAldHlwZSA8Ym9vbHZhbD4Jb3B0X3RlbXBvcmFyeQogJXR5 cGUgPGxpc3Q+CWNyZWF0ZV9zbG90X29wdGlvbnMgY3JlYXRlX3Nsb3RfbGVnYWN5X29wdF9s aXN0CiAldHlwZSA8ZGVmZWx0PgljcmVhdGVfc2xvdF9sZWdhY3lfb3B0CisldHlwZSA8bGlz dD4Jc2xvdF9uYW1lX2xpc3Qgc2xvdF9uYW1lX2xpc3Rfb3B0CiAKICUlCiAKQEAgLTExNCw2 ICsxMTYsNyBAQCBjb21tYW5kOgogCQkJfCByZWFkX3JlcGxpY2F0aW9uX3Nsb3QKIAkJCXwg dGltZWxpbmVfaGlzdG9yeQogCQkJfCBzaG93CisJCQl8IGxpc3Rfc2xvdHMKIAkJCTsKIAog LyoKQEAgLTEyNiw2ICsxMjksMzMgQEAgaWRlbnRpZnlfc3lzdGVtOgogCQkJCX0KIAkJCTsK IAorc2xvdF9uYW1lX2xpc3Q6CisJCQlJREVOVAorCQkJCXsKKwkJCQkJJCQgPSBsaXN0X21h a2UxKCQxKTsKKwkJCQl9CisJCQl8IHNsb3RfbmFtZV9saXN0ICcsJyBJREVOVAorCQkJCXsK KwkJCQkJJCQgPSBsYXBwZW5kKCQxLCAkMyk7CisJCQkJfQorCitzbG90X25hbWVfbGlzdF9v cHQ6CisJCQlzbG90X25hbWVfbGlzdAkJCXsgJCQgPSAkMTsgfQorCQkJfCAvKiBFTVBUWSAq LwkJCXsgJCQgPSBOSUw7IH0KKwkJOworCisvKgorICogTElTVF9TTE9UUworICovCitsaXN0 X3Nsb3RzOgorCQkJS19MSVNUX1NMT1RTIHNsb3RfbmFtZV9saXN0X29wdAorCQkJCXsKKwkJ CQkJTGlzdFNsb3RzQ21kICpjbWQgPSBtYWtlTm9kZShMaXN0U2xvdHNDbWQpOworCQkJCQlj bWQtPnNsb3RfbmFtZXMgPSAkMjsKKwkJCQkJJCQgPSAoTm9kZSAqKSBjbWQ7CisJCQkJfQor CQkJOworCiAvKgogICogUkVBRF9SRVBMSUNBVElPTl9TTE9UICVzCiAgKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfc2Nhbm5lci5sIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcmVwbF9zY2FubmVyLmwKaW5kZXggY2I0NjdjYTQ2Zi4uOTUwMWRm MzhlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9zY2FubmVy LmwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9zY2FubmVyLmwKQEAgLTEy OCw2ICsxMjgsNyBAQCBEUk9QX1JFUExJQ0FUSU9OX1NMT1QJCXsgcmV0dXJuIEtfRFJPUF9S RVBMSUNBVElPTl9TTE9UOyB9CiBUSU1FTElORV9ISVNUT1JZCXsgcmV0dXJuIEtfVElNRUxJ TkVfSElTVE9SWTsgfQogUEhZU0lDQUwJCQl7IHJldHVybiBLX1BIWVNJQ0FMOyB9CiBSRVNF UlZFX1dBTAkJCXsgcmV0dXJuIEtfUkVTRVJWRV9XQUw7IH0KK0xJU1RfU0xPVFMJCQl7IHJl dHVybiBLX0xJU1RfU0xPVFM7IH0KIExPR0lDQUwJCQkJeyByZXR1cm4gS19MT0dJQ0FMOyB9 CiBTTE9UCQkJCXsgcmV0dXJuIEtfU0xPVDsgfQogVEVNUE9SQVJZCQkJeyByZXR1cm4gS19U RU1QT1JBUlk7IH0KQEAgLTMwNCw2ICszMDUsNyBAQCByZXBsaWNhdGlvbl9zY2FubmVyX2lz X3JlcGxpY2F0aW9uX2NvbW1hbmQodm9pZCkKIAkJY2FzZSBLX1JFQURfUkVQTElDQVRJT05f U0xPVDoKIAkJY2FzZSBLX1RJTUVMSU5FX0hJU1RPUlk6CiAJCWNhc2UgS19TSE9XOgorCQlj YXNlIEtfTElTVF9TTE9UUzoKIAkJCS8qIFllczsgcHVzaCBiYWNrIHRoZSBmaXJzdCB0b2tl biBzbyB3ZSBjYW4gcGFyc2UgbGF0ZXIuICovCiAJCQlyZXBsX3B1c2hlZF9iYWNrX3Rva2Vu ID0gZmlyc3RfdG9rZW47CiAJCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5jcy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v c2xvdGZ1bmNzLmMKaW5kZXggNjAzNWNmNDgxNi4uODNhZGE2ZGI2YSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vc2xvdGZ1bmNzLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBwZ19waHlzaWNh bF9yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoWExvZ1JlY1B0ciBtb3ZldG8pCiAgKiBXQUwg YW5kIHJlbW92YWwgb2Ygb2xkIGNhdGFsb2cgdHVwbGVzLiAgQXMgZGVjb2RpbmcgaXMgZG9u ZSBpbiBmYXN0X2ZvcndhcmQKICAqIG1vZGUsIG5vIGNoYW5nZXMgYXJlIGdlbmVyYXRlZCBh bnl3YXkuCiAgKi8KLXN0YXRpYyBYTG9nUmVjUHRyCitYTG9nUmVjUHRyCiBwZ19sb2dpY2Fs X3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZShYTG9nUmVjUHRyIG1vdmV0bykKIHsKIAlMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHg7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi93YWxzZW5kZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRl ci5jCmluZGV4IDQ1YjhiMzY4NGYuLjBkMDFiODk2N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5jCkBAIC00NzMsNiArNDczLDE5NCBAQCBJZGVudGlmeVN5c3RlbSh2 b2lkKQogCWVuZF90dXBfb3V0cHV0KHRzdGF0ZSk7CiB9CiAKK3N0YXRpYyBpbnQKK3BnX3Fz b3J0X25hbWVjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlyZXR1cm4g c3RybmNtcChOYW1lU3RyKCooTmFtZSkgYSksIE5hbWVTdHIoKihOYW1lKSBiKSwgTkFNRURB VEFMRU4pOworfQorCisvKgorICogSGFuZGxlIHRoZSBMSVNUX1NMT1RTIGNvbW1hbmQuCisg Ki8KK3N0YXRpYyB2b2lkCitMaXN0U2xvdHMoTGlzdFNsb3RzQ21kICpjbWQpCit7CisJRGVz dFJlY2VpdmVyICpkZXN0OworCVR1cE91dHB1dFN0YXRlICp0c3RhdGU7CisJVHVwbGVEZXNj CXR1cGRlc2M7CisJTmFtZURhdGEgICAqc2xvdF9uYW1lczsKKwlpbnQJCQludW1zbG90X25h bWVzOworCisJbnVtc2xvdF9uYW1lcyA9IGxpc3RfbGVuZ3RoKGNtZC0+c2xvdF9uYW1lcyk7 CisJaWYgKG51bXNsb3RfbmFtZXMpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKwkJaW50CQkJ aSA9IDA7CisKKwkJc2xvdF9uYW1lcyA9IHBhbGxvYyhudW1zbG90X25hbWVzICogc2l6ZW9m KE5hbWVEYXRhKSk7CisJCWZvcmVhY2gobGMsIGNtZC0+c2xvdF9uYW1lcykKKwkJeworCQkJ Y2hhcgkgICAqc2xvdF9uYW1lID0gbGZpcnN0KGxjKTsKKworCQkJUmVwbGljYXRpb25TbG90 VmFsaWRhdGVOYW1lKHNsb3RfbmFtZSwgRVJST1IpOworCQkJbmFtZXN0cmNweSgmc2xvdF9u YW1lc1tpKytdLCBzbG90X25hbWUpOworCQl9CisKKwkJcXNvcnQoc2xvdF9uYW1lcywgbnVt c2xvdF9uYW1lcywgc2l6ZW9mKE5hbWVEYXRhKSwgcGdfcXNvcnRfbmFtZWNtcCk7CisJfQor CisJZGVzdCA9IENyZWF0ZURlc3RSZWNlaXZlcihEZXN0UmVtb3RlU2ltcGxlKTsKKworCS8q IG5lZWQgYSB0dXBsZSBkZXNjcmlwdG9yIHJlcHJlc2VudGluZyBmb3VyIGNvbHVtbnMgKi8K Kwl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMTApOworCVR1cGxlRGVzY0lu aXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJzbG90X25hbWUiLAor CQkJCQkJCSAgVEVYVE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJwbHVnaW4iLAorCQkJCQkJCSAgVEVYVE9JRCwg LTEsIDApOworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1i ZXIpIDMsICJzbG90X3R5cGUiLAorCQkJCQkJCSAgVEVYVE9JRCwgLTEsIDApOworCVR1cGxl RGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDQsICJkYXRvaWQi LAorCQkJCQkJCSAgSU5UOE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50 cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDUsICJkYXRhYmFzZSIsCisJCQkJCQkJICBURVhU T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0 ck51bWJlcikgNiwgInRlbXBvcmFyeSIsCisJCQkJCQkJICBJTlQ0T0lELCAtMSwgMCk7CisJ VHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNywgInht aW4iLAorCQkJCQkJCSAgSU5UOE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0luaXRCdWlsdGlu RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDgsICJjYXRhbG9nX3htaW4iLAorCQkJCQkJ CSAgSU5UOE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVz YywgKEF0dHJOdW1iZXIpIDksICJyZXN0YXJ0X2xzbiIsCisJCQkJCQkJICBURVhUT0lELCAt MSwgMCk7CisJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJl cikgMTAsICJjb25maXJtZWRfZmx1c2giLAorCQkJCQkJCSAgVEVYVE9JRCwgLTEsIDApOwor CisJLyogcHJlcGFyZSBmb3IgcHJvamVjdGlvbiBvZiB0dXBsZXMgKi8KKwl0c3RhdGUgPSBi ZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVzdCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwp OworCisJTFdMb2NrQWNxdWlyZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hB UkVEKTsKKwlmb3IgKGludCBzbG90bm8gPSAwOyBzbG90bm8gPCBtYXhfcmVwbGljYXRpb25f c2xvdHM7IHNsb3RubysrKQorCXsKKwkJUmVwbGljYXRpb25TbG90ICpzbG90ID0gJlJlcGxp Y2F0aW9uU2xvdEN0bC0+cmVwbGljYXRpb25fc2xvdHNbc2xvdG5vXTsKKwkJY2hhcgkJcmVz dGFydF9sc25fc3RyW01BWEZOQU1FTEVOXTsKKwkJY2hhcgkJY29uZmlybWVkX2ZsdXNoX2xz bl9zdHJbTUFYRk5BTUVMRU5dOworCQlEYXR1bQkJdmFsdWVzWzEwXTsKKwkJYm9vbAkJbnVs bHNbMTBdOworCisJCVJlcGxpY2F0aW9uU2xvdFBlcnNpc3RlbmN5IHBlcnNpc3RlbmN5Owor CQlUcmFuc2FjdGlvbklkIHhtaW47CisJCVRyYW5zYWN0aW9uSWQgY2F0YWxvZ194bWluOwor CQlYTG9nUmVjUHRyCXJlc3RhcnRfbHNuOworCQlYTG9nUmVjUHRyCWNvbmZpcm1lZF9mbHVz aF9sc247CisJCU9pZAkJCWRhdG9pZDsKKwkJTmFtZURhdGEJc2xvdF9uYW1lOworCQlOYW1l RGF0YQlwbHVnaW47CisJCWludAkJCWk7CisJCWludDY0CQl0bXBiaWdpbnQ7CisKKwkJaWYg KCFzbG90LT5pbl91c2UpCisJCQljb250aW51ZTsKKworCQlTcGluTG9ja0FjcXVpcmUoJnNs b3QtPm11dGV4KTsKKworCQl4bWluID0gc2xvdC0+ZGF0YS54bWluOworCQljYXRhbG9nX3ht aW4gPSBzbG90LT5kYXRhLmNhdGFsb2dfeG1pbjsKKwkJZGF0b2lkID0gc2xvdC0+ZGF0YS5k YXRhYmFzZTsKKwkJcmVzdGFydF9sc24gPSBzbG90LT5kYXRhLnJlc3RhcnRfbHNuOworCQlj b25maXJtZWRfZmx1c2hfbHNuID0gc2xvdC0+ZGF0YS5jb25maXJtZWRfZmx1c2g7CisJCW5h bWVzdHJjcHkoJnNsb3RfbmFtZSwgTmFtZVN0cihzbG90LT5kYXRhLm5hbWUpKTsKKwkJbmFt ZXN0cmNweSgmcGx1Z2luLCBOYW1lU3RyKHNsb3QtPmRhdGEucGx1Z2luKSk7CisJCXBlcnNp c3RlbmN5ID0gc2xvdC0+ZGF0YS5wZXJzaXN0ZW5jeTsKKworCQlTcGluTG9ja1JlbGVhc2Uo JnNsb3QtPm11dGV4KTsKKworCQlpZiAobnVtc2xvdF9uYW1lcyAmJgorCQkJIWJzZWFyY2go KHZvaWQgKikgJnNsb3RfbmFtZSwgKHZvaWQgKikgc2xvdF9uYW1lcywKKwkJCQkJIG51bXNs b3RfbmFtZXMsIHNpemVvZihOYW1lRGF0YSksIHBnX3Fzb3J0X25hbWVjbXApKQorCQkJY29u dGludWU7CisKKwkJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKKworCQlpID0g MDsKKwkJdmFsdWVzW2krK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKE5hbWVTdHIoc2xvdF9u YW1lKSk7CisKKwkJaWYgKGRhdG9pZCA9PSBJbnZhbGlkT2lkKQorCQkJbnVsbHNbaSsrXSA9 IHRydWU7CisJCWVsc2UKKwkJCXZhbHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShO YW1lU3RyKHBsdWdpbikpOworCisJCWlmIChkYXRvaWQgPT0gSW52YWxpZE9pZCkKKwkJCXZh bHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bSgicGh5c2ljYWwiKTsKKwkJZWxzZQor CQkJdmFsdWVzW2krK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCJsb2dpY2FsIik7CisKKwkJ aWYgKGRhdG9pZCA9PSBJbnZhbGlkT2lkKQorCQkJbnVsbHNbaSsrXSA9IHRydWU7CisJCWVs c2UKKwkJeworCQkJdG1wYmlnaW50ID0gZGF0b2lkOworCQkJdmFsdWVzW2krK10gPSBJbnQ2 NEdldERhdHVtKHRtcGJpZ2ludCk7CisJCX0KKworCQlpZiAoZGF0b2lkID09IEludmFsaWRP aWQpCisJCQludWxsc1tpKytdID0gdHJ1ZTsKKwkJZWxzZQorCQl7CisJCQlNZW1vcnlDb250 ZXh0IGN1ciA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJCQkvKiBzeXNjYWNoZSBhY2Nl c3MgbmVlZHMgYSB0cmFuc2FjdGlvbiBlbnYuICovCisJCQlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCQkJLyogbWFrZSBkYm5hbWUgbGl2ZSBvdXRzaWRlIFRYIGNvbnRleHQgKi8K KwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXIpOworCQkJdmFsdWVzW2krK10gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKGdldF9kYXRhYmFzZV9uYW1lKGRhdG9pZCkpOworCQkJQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkvKiBDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQg c3dpdGNoZXMgdG8gVG9wTWVtb3J5Q29udGV4dCAqLworCQkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKGN1cik7CisJCX0KKworCQl2YWx1ZXNbaSsrXSA9IEludDMyR2V0RGF0dW0ocGVyc2lz dGVuY3kgPT0gUlNfVEVNUE9SQVJZID8gMSA6IDApOworCisJCWlmICh4bWluICE9IEludmFs aWRUcmFuc2FjdGlvbklkKQorCQl7CisJCQl0bXBiaWdpbnQgPSB4bWluOworCQkJdmFsdWVz W2krK10gPSBJbnQ2NEdldERhdHVtKHRtcGJpZ2ludCk7CisJCX0KKwkJZWxzZQorCQkJbnVs bHNbaSsrXSA9IHRydWU7CisKKwkJaWYgKGNhdGFsb2dfeG1pbiAhPSBJbnZhbGlkVHJhbnNh Y3Rpb25JZCkKKwkJeworCQkJdG1wYmlnaW50ID0gY2F0YWxvZ194bWluOworCQkJdmFsdWVz W2krK10gPSBJbnQ2NEdldERhdHVtKHRtcGJpZ2ludCk7CisJCX0KKwkJZWxzZQorCQkJbnVs bHNbaSsrXSA9IHRydWU7CisKKwkJaWYgKHJlc3RhcnRfbHNuICE9IEludmFsaWRYTG9nUmVj UHRyKQorCQl7CisJCQlzbnByaW50ZihyZXN0YXJ0X2xzbl9zdHIsIHNpemVvZihyZXN0YXJ0 X2xzbl9zdHIpLCAiJVgvJVgiLAorCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHJlc3RhcnRfbHNu KSk7CisJCQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocmVzdGFydF9sc25f c3RyKTsKKwkJfQorCQllbHNlCisJCQludWxsc1tpKytdID0gdHJ1ZTsKKworCQlpZiAoY29u ZmlybWVkX2ZsdXNoX2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0cikKKwkJeworCQkJc25wcmlu dGYoY29uZmlybWVkX2ZsdXNoX2xzbl9zdHIsIHNpemVvZihjb25maXJtZWRfZmx1c2hfbHNu X3N0ciksCisJCQkJCSAiJVgvJVgiLCBMU05fRk9STUFUX0FSR1MoY29uZmlybWVkX2ZsdXNo X2xzbikpOworCQkJdmFsdWVzW2krK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNvbmZpcm1l ZF9mbHVzaF9sc25fc3RyKTsKKwkJfQorCQllbHNlCisJCQludWxsc1tpKytdID0gdHJ1ZTsK KworCQkvKiBzZW5kIGl0IHRvIGRlc3QgKi8KKwkJZG9fdHVwX291dHB1dCh0c3RhdGUsIHZh bHVlcywgbnVsbHMpOworCX0KKwlMV0xvY2tSZWxlYXNlKFJlcGxpY2F0aW9uU2xvdENvbnRy b2xMb2NrKTsKKworCWVuZF90dXBfb3V0cHV0KHRzdGF0ZSk7Cit9CisKIC8qIEhhbmRsZSBS RUFEX1JFUExJQ0FUSU9OX1NMT1QgY29tbWFuZCAqLwogc3RhdGljIHZvaWQKIFJlYWRSZXBs aWNhdGlvblNsb3QoUmVhZFJlcGxpY2F0aW9uU2xvdENtZCAqY21kKQpAQCAtMTgyMCw2ICsy MDA4LDEzIEBAIGV4ZWNfcmVwbGljYXRpb25fY29tbWFuZChjb25zdCBjaGFyICpjbWRfc3Ry aW5nKQogCQkJRW5kUmVwbGljYXRpb25Db21tYW5kKGNtZHRhZyk7CiAJCQlicmVhazsKIAor CQljYXNlIFRfTGlzdFNsb3RzQ21kOgorCQkJY21kdGFnID0gIkxJU1RfU0xPVFMiOworCQkJ c2V0X3BzX2Rpc3BsYXkoY21kdGFnKTsKKwkJCUxpc3RTbG90cygoTGlzdFNsb3RzQ21kICop IGNtZF9ub2RlKTsKKwkJCUVuZFJlcGxpY2F0aW9uQ29tbWFuZChjbWR0YWcpOworCQkJYnJl YWs7CisKIAkJY2FzZSBUX1N0YXJ0UmVwbGljYXRpb25DbWQ6CiAJCQl7CiAJCQkJU3RhcnRS ZXBsaWNhdGlvbkNtZCAqY21kID0gKFN0YXJ0UmVwbGljYXRpb25DbWQgKikgY21kX25vZGU7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKaW5kZXggNzk0MGQ2 NDYzOS4uZjJhOTUxNzA5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRf ZXZlbnQuYwpAQCAtMjMwLDYgKzIzMCw5IEBAIHBnc3RhdF9nZXRfd2FpdF9hY3Rpdml0eShX YWl0RXZlbnRBY3Rpdml0eSB3KQogCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hF Ul9NQUlOOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsTGF1bmNoZXJNYWluIjsKIAkJCWJy ZWFrOworCQljYXNlIFdBSVRfRVZFTlRfUkVQTF9TTE9UX1NZTkNfTUFJTjoKKwkJCWV2ZW50 X25hbWUgPSAiUmVwbFNsb3RTeW5jTWFpbiI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VW RU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfTUFJTjoKIAkJCWV2ZW50X25hbWUgPSAiTG9n aWNhbFBhcmFsbGVsQXBwbHlNYWluIjsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYwppbmRleCBjYWIzZGRiZTExLi4wZWU3YWQxMzQ4IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNjMsOCArNjMsMTIgQEAKICNpbmNsdWRl ICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsd3Jp dGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vc3luY3JlcC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L3dhbHJlY2VpdmVyLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhcmdlX29i amVjdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKQEAgLTQ1ODcsNiArNDU5 MSwyOCBAQCBzdHJ1Y3QgY29uZmlnX3N0cmluZyBDb25maWd1cmVOYW1lc1N0cmluZ1tdID0K IAkJY2hlY2tfaW9fZGlyZWN0LCBhc3NpZ25faW9fZGlyZWN0LCBOVUxMCiAJfSwKIAorCXsK KwkJeyJzeW5jaHJvbml6ZV9zbG90X25hbWVzIiwgUEdDX1NJR0hVUCwgUkVQTElDQVRJT05f U1RBTkRCWSwKKwkJCWdldHRleHRfbm9vcCgiU2V0cyB0aGUgbmFtZXMgb2YgcmVwbGljYXRp b24gc2xvdHMgd2hpY2ggdG8gc3luY2hyb25pemUgZnJvbSBwcmltYXJ5IHRvIHN0YW5kYnku IiksCisJCQlnZXR0ZXh0X25vb3AoIlZhbHVlIG9mIFwiKlwiIG1lYW5zIGFsbC4iKSwKKwkJ CUdVQ19MSVNUX0lOUFVUIHwgR1VDX0xJU1RfUVVPVEUKKwkJfSwKKwkJJnN5bmNocm9uaXpl X3Nsb3RfbmFtZXMsCisJCSIiLAorCQljaGVja19zeW5jaHJvbml6ZV9zbG90X25hbWVzLCBO VUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJzdGFuZGJ5X3Nsb3RfbmFtZXMiLCBQR0NfU0lH SFVQLCBSRVBMSUNBVElPTl9QUklNQVJZLAorCQkJZ2V0dGV4dF9ub29wKCJMaXN0IG9mIHBo eXNpY2FsIHNsb3RzIHRoYXQgbXVzdCBjb25maXJtIGNoYW5nZXMgYmVmb3JlIGNoYW5nZXMg YXJlIHNlbnQgdG8gbG9naWNhbCByZXBsaWNhdGlvbiBjb25zdW1lcnMuIiksCisJCQlOVUxM LAorCQkJR1VDX0xJU1RfSU5QVVQgfCBHVUNfTElTVF9RVU9URQorCQl9LAorCQkmc3RhbmRi eV9zbG90X25hbWVzLAorCQkiIiwKKwkJY2hlY2tfc3RhbmRieV9zbG90X25hbWVzLCBOVUxM LCBOVUxMCisJfSwKKwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCXsKIAkJe05VTEws IDAsIDAsIE5VTEwsIE5VTEx9LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXgg ZGNlNTA0OWJjMi4uMmZmMjE4OGMwMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzMwLDYgKzMzMCw3IEBACiAJCQkJIyBh bmQgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXBwbGljYXRpb25fbmFtZQogCQkJCSMgZnJv bSBzdGFuZGJ5KHMpOyAnKicgPSBhbGwKICN2YWN1dW1fZGVmZXJfY2xlYW51cF9hZ2UgPSAw CSMgbnVtYmVyIG9mIHhhY3RzIGJ5IHdoaWNoIGNsZWFudXAgaXMgZGVsYXllZAorI3N0YW5k Ynlfc2xvdF9uYW1lcyA9ICcnCSMgcGh5c2ljYWwgc3RhbmRieSBzbG90IG5hbWVzIHRoYXQg bG9naWNhbCByZXBsaWNhdGlvbiB3YWl0cyBmb3IKIAogIyAtIFN0YW5kYnkgU2VydmVycyAt CiAKQEAgLTM1Nyw2ICszNTgsNyBAQAogI3dhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCA9 IDVzCSMgdGltZSB0byB3YWl0IGJlZm9yZSByZXRyeWluZyB0bwogCQkJCQkjIHJldHJpZXZl IFdBTCBhZnRlciBhIGZhaWxlZCBhdHRlbXB0CiAjcmVjb3ZlcnlfbWluX2FwcGx5X2RlbGF5 ID0gMAkJIyBtaW5pbXVtIGRlbGF5IGZvciBhcHBseWluZyBjaGFuZ2VzIGR1cmluZyByZWNv dmVyeQorI3N5bmNocm9uaXplX3Nsb3RfbmFtZXMgPSAnJwkJIyBsb2dpY2FsIHJlcGxpY2F0 aW9uIHNsb3RzIHRvIHN5bmMgdG8gc3RhbmRieQogCiAjIC0gU3Vic2NyaWJlcnMgLQogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgKaW5kZXggMjE0ZGM2YzI5 ZS4uMGU3N2Y5ZWU1YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNt ZHMuaApAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRy ZXNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKKyNpbmNsdWRlICJyZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oIgogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBDcmVhdGVT dWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTdWJzY3JpcHRpb25TdG10 ICpzdG10LAogCQkJCQkJCQkJCWJvb2wgaXNUb3BMZXZlbCk7CkBAIC0yOCw0ICsyOSw2IEBA IGV4dGVybiB2b2lkIEFsdGVyU3Vic2NyaXB0aW9uT3duZXJfb2lkKE9pZCBzdWJpZCwgT2lk IG5ld093bmVySWQpOwogCiBleHRlcm4gY2hhciBkZWZHZXRTdHJlYW1pbmdNb2RlKERlZkVs ZW0gKmRlZik7CiAKK2V4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BBdFB1Yk5vZGUo V2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIGNoYXIgKnNsb3RuYW1lLCBib29sIG1pc3Npbmdf b2spOworCiAjZW5kaWYJCQkJCQkJLyogU1VCU0NSSVBUSU9OQ01EU19IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L3JlcGxub2Rlcy5oCmluZGV4IDQzMjFiYThmODYuLjk4MGUwYjJlZTIgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3JlcGxub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3JlcGxub2Rlcy5oCkBAIC0zMyw2ICszMywxNSBAQCB0eXBlZGVmIHN0cnVjdCBJZGVudGlm eVN5c3RlbUNtZAogCU5vZGVUYWcJCXR5cGU7CiB9IElkZW50aWZ5U3lzdGVtQ21kOwogCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJTElTVF9TTE9UUyBjb21tYW5kCisgKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3R5cGVkZWYgc3RydWN0IExpc3RTbG90c0Nt ZAoreworCU5vZGVUYWcJCXR5cGU7CisJTGlzdAkgICAqc2xvdF9uYW1lczsKK30gTGlzdFNs b3RzQ21kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJQkFTRV9CQUNLVVAg Y29tbWFuZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxh dW5jaGVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaApp bmRleCBhMDdjOWNiMzExLi44MGZkYmY5NjU3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2FsbGF1bmNoZXIuaApAQCAtMzEsNCArMzEsNiBAQCBleHRlcm4gYm9vbCBJ c0xvZ2ljYWxMYXVuY2hlcih2b2lkKTsKIAogZXh0ZXJuIHBpZF90IEdldExlYWRlckFwcGx5 V29ya2VyUGlkKHBpZF90IHBpZCk7CiAKK2V4dGVybiBQR0RMTElNUE9SVCBjaGFyICpQcmlt YXJ5Q29ubkluZm87CisKICNlbmRpZgkJCQkJCQkvKiBMT0dJQ0FMTEFVTkNIRVJfSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCmluZGV4IDM5NTg4ZGE3 OWYuLjY0MDg3NTM1NTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWx3b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29y a2VyLmgKQEAgLTE0LDEwICsxNCwxNiBAQAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKKyNp bmNsdWRlICJ1dGlscy9ndWMuaCIKKworZXh0ZXJuIGNoYXIgKnN5bmNocm9uaXplX3Nsb3Rf bmFtZXM7CitleHRlcm4gY2hhciAqc3RhbmRieV9zbG90X25hbWVzOworCiBleHRlcm4gUEdE TExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVu ZGluZzsKIAogZXh0ZXJuIHZvaWQgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKTsK IGV4dGVybiB2b2lkIFBhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKTsK K2V4dGVybiB2b2lkIFJlcGxTbG90U3luY01haW4oRGF0dW0gbWFpbl9hcmcpOwogCiBleHRl cm4gYm9vbCBJc0xvZ2ljYWxXb3JrZXIodm9pZCk7CiBleHRlcm4gYm9vbCBJc0xvZ2ljYWxQ YXJhbGxlbEFwcGx5V29ya2VyKHZvaWQpOwpAQCAtMjksNCArMzUsNyBAQCBleHRlcm4gdm9p ZCBMb2dpY2FsUmVwV29ya2Vyc1dha2V1cEF0Q29tbWl0KE9pZCBzdWJpZCk7CiAKIGV4dGVy biB2b2lkIEF0RU9YYWN0X0xvZ2ljYWxSZXBXb3JrZXJzKGJvb2wgaXNDb21taXQpOwogCitl eHRlcm4gYm9vbCBjaGVja19zeW5jaHJvbml6ZV9zbG90X25hbWVzKGNoYXIgKipuZXd2YWws IHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSk7CitleHRlcm4gYm9vbCBjaGVja19z dGFuZGJ5X3Nsb3RfbmFtZXMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3Vy Y2Ugc291cmNlKTsKKwogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxXT1JLRVJfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vc2xvdC5oCmluZGV4IGE4YTg5ZGM3ODQuLjVkYzJlMGQzMGQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaAorKysgYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9zbG90LmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlICJzdG9y YWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJz dG9yYWdlL3NwaW4uaCIKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgog CiAvKgogICogQmVoYXZpb3VyIG9mIHJlcGxpY2F0aW9uIHNsb3RzLCB1cG9uIHJlbGVhc2Ug b3IgY3Jhc2guCkBAIC0yMzgsNyArMjM3LDYgQEAgZXh0ZXJuIFJlcGxpY2F0aW9uU2xvdCAq U2VhcmNoTmFtZWRSZXBsaWNhdGlvblNsb3QoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBuZWVk X2wKIGV4dGVybiBpbnQJUmVwbGljYXRpb25TbG90SW5kZXgoUmVwbGljYXRpb25TbG90ICpz bG90KTsKIGV4dGVybiBib29sIFJlcGxpY2F0aW9uU2xvdE5hbWUoaW50IGluZGV4LCBOYW1l IG5hbWUpOwogZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90TmFtZUZvclRhYmxlc3luYyhP aWQgc3Vib2lkLCBPaWQgcmVsaWQsIGNoYXIgKnN5bmNzbG90bmFtZSwgU2l6ZSBzenNsb3Qp OwotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90RHJvcEF0UHViTm9kZShXYWxSZWNlaXZl ckNvbm4gKndyY29ubiwgY2hhciAqc2xvdG5hbWUsIGJvb2wgbWlzc2luZ19vayk7CiAKIGV4 dGVybiB2b2lkIFN0YXJ0dXBSZXBsaWNhdGlvblNsb3RzKHZvaWQpOwogZXh0ZXJuIHZvaWQg Q2hlY2tQb2ludFJlcGxpY2F0aW9uU2xvdHModm9pZCk7CkBAIC0yNDYsNCArMjQ0LDcgQEAg ZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFJlcGxpY2F0aW9uU2xvdHModm9pZCk7CiBleHRlcm4g dm9pZCBDaGVja1Nsb3RSZXF1aXJlbWVudHModm9pZCk7CiBleHRlcm4gdm9pZCBDaGVja1Ns b3RQZXJtaXNzaW9ucyh2b2lkKTsKIAorZXh0ZXJuIFhMb2dSZWNQdHIgcGdfbG9naWNhbF9y ZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoWExvZ1JlY1B0ciBtb3ZldG8pOworCisKICNlbmRp ZgkJCQkJCQkvKiBTTE9UX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5oCmluZGV4IDI4MTYyNmZhNmYuLjllOWQ2NGZhZjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd2FscmVjZWl2ZXIuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgInBndGlt ZS5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWxwcm90by5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2NvbmRp dGlvbl92YXJpYWJsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKQEAgLTE5MSw2 ICsxOTIsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAl9CQkJcHJvdG87CiB9IFdhbFJjdlN0cmVh bU9wdGlvbnM7CiAKKy8qCisgKiBTbG90IGluZm9ybWF0aW9uIHJlY2VpdmVyIGZyb20gcmVt b3RlLgorICoKKyAqIEN1cnJlbnRseSBzYW1lIGFzIFJlcGxpY2F0aW9uU2xvdFBlcnNpc3Rl bnREYXRhIGV4Y2VwdCBsYXN0X3N5bmNfdGltZQorICovCit0eXBlZGVmIHN0cnVjdCBXYWxS ZWN2UmVwbGljYXRpb25TbG90RGF0YQoreworCVJlcGxpY2F0aW9uU2xvdFBlcnNpc3RlbnRE YXRhIHBlcnNpc3RlbnRfZGF0YTsKKwlUaW1lc3RhbXBUeiBsYXN0X3N5bmNfdGltZTsKK30g V2FsUmVjdlJlcGxpY2F0aW9uU2xvdERhdGE7CisKIHN0cnVjdCBXYWxSZWNlaXZlckNvbm47 CiB0eXBlZGVmIHN0cnVjdCBXYWxSZWNlaXZlckNvbm4gV2FsUmVjZWl2ZXJDb25uOwogCkBA IC0yODAsNiArMjkyLDExIEBAIHR5cGVkZWYgdm9pZCAoKndhbHJjdl9nZXRfc2VuZGVyaW5m b19mbikgKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIHR5cGVkZWYgY2hhciAqKCp3YWxyY3Zf aWRlbnRpZnlfc3lzdGVtX2ZuKSAoV2FsUmVjZWl2ZXJDb25uICpjb25uLAogCQkJCQkJCQkJ CQlUaW1lTGluZUlEICpwcmltYXJ5X3RsaSk7CiAKKy8qCisgKiBUT0RPCisgKi8KK3R5cGVk ZWYgTGlzdCAqKCp3YWxyY3ZfbGlzdF9zbG90c19mbikgKFdhbFJlY2VpdmVyQ29ubiAqY29u biwgY29uc3QgY2hhciAqc2xvdHMpOworCiAvKgogICogd2FscmN2X3NlcnZlcl92ZXJzaW9u X2ZuCiAgKgpAQCAtMzkzLDYgKzQxMCw3IEBAIHR5cGVkZWYgc3RydWN0IFdhbFJlY2VpdmVy RnVuY3Rpb25zVHlwZQogCXdhbHJjdl9nZXRfY29ubmluZm9fZm4gd2FscmN2X2dldF9jb25u aW5mbzsKIAl3YWxyY3ZfZ2V0X3NlbmRlcmluZm9fZm4gd2FscmN2X2dldF9zZW5kZXJpbmZv OwogCXdhbHJjdl9pZGVudGlmeV9zeXN0ZW1fZm4gd2FscmN2X2lkZW50aWZ5X3N5c3RlbTsK Kwl3YWxyY3ZfbGlzdF9zbG90c19mbiB3YWxyY3ZfbGlzdF9zbG90czsKIAl3YWxyY3Zfc2Vy dmVyX3ZlcnNpb25fZm4gd2FscmN2X3NlcnZlcl92ZXJzaW9uOwogCXdhbHJjdl9yZWFkdGlt ZWxpbmVoaXN0b3J5ZmlsZV9mbiB3YWxyY3ZfcmVhZHRpbWVsaW5laGlzdG9yeWZpbGU7CiAJ d2FscmN2X3N0YXJ0c3RyZWFtaW5nX2ZuIHdhbHJjdl9zdGFydHN0cmVhbWluZzsKQEAgLTQx Nyw2ICs0MzUsOCBAQCBleHRlcm4gUEdETExJTVBPUlQgV2FsUmVjZWl2ZXJGdW5jdGlvbnNU eXBlICpXYWxSZWNlaXZlckZ1bmN0aW9uczsKIAlXYWxSZWNlaXZlckZ1bmN0aW9ucy0+d2Fs cmN2X2dldF9zZW5kZXJpbmZvKGNvbm4sIHNlbmRlcl9ob3N0LCBzZW5kZXJfcG9ydCkKICNk ZWZpbmUgd2FscmN2X2lkZW50aWZ5X3N5c3RlbShjb25uLCBwcmltYXJ5X3RsaSkgXAogCVdh bFJlY2VpdmVyRnVuY3Rpb25zLT53YWxyY3ZfaWRlbnRpZnlfc3lzdGVtKGNvbm4sIHByaW1h cnlfdGxpKQorI2RlZmluZSB3YWxyY3ZfbGlzdF9zbG90cyhjb25uLCBzbG90cykgXAorCVdh bFJlY2VpdmVyRnVuY3Rpb25zLT53YWxyY3ZfbGlzdF9zbG90cyhjb25uLCBzbG90cykKICNk ZWZpbmUgd2FscmN2X3NlcnZlcl92ZXJzaW9uKGNvbm4pIFwKIAlXYWxSZWNlaXZlckZ1bmN0 aW9ucy0+d2FscmN2X3NlcnZlcl92ZXJzaW9uKGNvbm4pCiAjZGVmaW5lIHdhbHJjdl9yZWFk dGltZWxpbmVoaXN0b3J5ZmlsZShjb25uLCB0bGksIGZpbGVuYW1lLCBjb250ZW50LCBzaXpl KSBcCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJu YWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4 IGRjZTcxZDJjNTAuLjViNGZkYTJmZDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3dvcmtlcl9pbnRlcm5hbC5oCkBAIC02NSw3ICs2NSw3IEBAIHR5cGVkZWYgc3RydWN0IExv Z2ljYWxSZXBXb3JrZXIKIAkgKiB3b3VsZCBiZSBjcmVhdGVkIGZvciBlYWNoIHRyYW5zYWN0 aW9uIHdoaWNoIHdpbGwgYmUgZGVsZXRlZCBhZnRlciB0aGUKIAkgKiB0cmFuc2FjdGlvbiBp cyBmaW5pc2hlZC4KIAkgKi8KLQlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNldDsKKwlzdHJ1 Y3QgRmlsZVNldCAgICAqc3RyZWFtX2ZpbGVzZXQ7CiAKIAkvKgogCSAqIFBJRCBvZiBsZWFk ZXIgYXBwbHkgd29ya2VyIGlmIHRoaXMgc2xvdCBpcyB1c2VkIGZvciBhIHBhcmFsbGVsIGFw cGx5CkBAIC0yMjYsMTUgKzIyNiwxNSBAQCBleHRlcm4gUEdETExJTVBPUlQgTG9naWNhbFJl cFdvcmtlciAqTXlMb2dpY2FsUmVwV29ya2VyOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg aW5fcmVtb3RlX3RyYW5zYWN0aW9uOwogCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtl cl9hdHRhY2goaW50IHNsb3QpOwotZXh0ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxy ZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsCitleHRlcm4gTG9naWNhbFJl cFdvcmtlciAqbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgZGJpZCwgT2lkIHN1YmlkLCBP aWQgcmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlfcnVubmluZyk7CiBleHRlcm4gTGlz dCAqbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmlu Zyk7CiBleHRlcm4gYm9vbCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKIAkJCQkJCQkJCSBPaWQgdXNlcmlkLCBP aWQgcmVsaWQsCiAJCQkJCQkJCQkgZHNtX2hhbmRsZSBzdWJ3b3JrZXJfZHNtKTsKLWV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpOwor ZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgZGJpZCwgT2lkIHN1Ymlk LCBPaWQgcmVsaWQpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9wYV93b3JrZXJfc3RvcChp bnQgc2xvdF9ubywgdWludDE2IGdlbmVyYXRpb24pOwotZXh0ZXJuIHZvaWQgbG9naWNhbHJl cF93b3JrZXJfd2FrZXVwKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKK2V4dGVybiB2b2lkIGxv Z2ljYWxyZXBfd29ya2VyX3dha2V1cChPaWQgZGJpZCwgT2lkIHN1YmlkLCBPaWQgcmVsaWQp OwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwX3B0cihMb2dpY2FsUmVw V29ya2VyICp3b3JrZXIpOwogCiBleHRlcm4gaW50CWxvZ2ljYWxyZXBfc3luY193b3JrZXJf Y291bnQoT2lkIHN1YmlkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRf ZXZlbnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAppbmRleCA1MThkM2Iw YTFmLi5jY2NkNGQ5ZDMyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2 ZW50LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC00Myw2ICs0 Myw3IEBAIHR5cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfTE9HSUNBTF9BUFBMWV9NQUlOLAog CVdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNB TF9QQVJBTExFTF9BUFBMWV9NQUlOLAorCVdBSVRfRVZFTlRfUkVQTF9TTE9UX1NZTkNfTUFJ TiwKIAlXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU0sCiAJV0FJVF9FVkVOVF9TWVNM T0dHRVJfTUFJTiwKIAlXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9NQUlOLApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9yZWNvdmVyeS9t ZXNvbi5idWlsZAppbmRleCAyMDA4OTU4MDEwLi5iNmZjYzg3MDRlIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS9t ZXNvbi5idWlsZApAQCAtNDIsNiArNDIsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMzRf Y3JlYXRlX2RhdGFiYXNlLnBsJywKICAgICAgICd0LzAzNV9zdGFuZGJ5X2xvZ2ljYWxfZGVj b2RpbmcucGwnLAogICAgICAgJ3QvMDM2X3RydW5jYXRlZF9kcm9wcGVkLnBsJywKKyAgICAg ICd0LzAzN19zbG90X3N5bmMucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWNvdmVyeS90LzAzN19zbG90X3N5bmMucGwgYi9zcmMvdGVzdC9yZWNvdmVy eS90LzAzN19zbG90X3N5bmMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMDUyMDA0MmQ5NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5 L3QvMDM3X3Nsb3Rfc3luYy5wbApAQCAtMCwwICsxLDEzMCBAQAorCisjIENvcHlyaWdodCAo YykgMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0 cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRu b2RlX3ByaW1hcnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnkn KTsKK215ICRub2RlX3BoeXNfc3RhbmRieSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygncGh5c19zdGFuZGJ5Jyk7CitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7CisKKyMgZmluZCAkcGF0IGlu IGxvZ2ZpbGUgb2YgJG5vZGUgYWZ0ZXIgJG9mZi10aCBieXRlCitzdWIgZmluZF9pbl9sb2cK K3sKKwlteSAoJG5vZGUsICRwYXQsICRvZmYpID0gQF87CisKKwkkb2ZmID0gMCB1bmxlc3Mg ZGVmaW5lZCAkb2ZmOworCW15ICRsb2cgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6c2x1 cnBfZmlsZSgkbm9kZS0+bG9nZmlsZSk7CisJcmV0dXJuIDAgaWYgKGxlbmd0aCgkbG9nKSA8 PSAkb2ZmKTsKKworCSRsb2cgPSBzdWJzdHIoJGxvZywgJG9mZik7CisKKwlyZXR1cm4gJGxv ZyA9fiBtLyRwYXQvOworfQorCisjIENoZWNrIGludmFsaWRhdGlvbiBpbiB0aGUgbG9nZmls ZQorc3ViIGNoZWNrX2Zvcl9pbnZhbGlkYXRpb24KK3sKKwlteSAoJGxvZ19zdGFydCwgJHRl c3RfbmFtZSkgPSBAXzsKKworCSMgbWVzc2FnZSBzaG91bGQgYmUgaXNzdWVkCisJb2soIGZp bmRfaW5fbG9nKAorCQkkbm9kZV9waHlzX3N0YW5kYnksCisgICAgICAgICJpbnZhbGlkYXRp bmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBcInN1YjFcIiIsICRsb2dfc3RhcnQpLAor ICAgICAgICAic3ViMSBzbG90IGludmFsaWRhdGlvbiBpcyBsb2dnZWQgJHRlc3RfbmFtZSIp OworfQorCisjIENoZWNrIGNvbmZsaWN0aW5nIHN0YXR1cyBpbiBwZ19yZXBsaWNhdGlvbl9z bG90cy4KK3N1YiBjaGVja19zbG90c19jb25mbGljdGluZ19zdGF0dXMKK3sKKwlteSAkcmVz ID0gJG5vZGVfcGh5c19zdGFuZGJ5LT5zYWZlX3BzcWwoCisJCQkJJ3Bvc3RncmVzJywgcXEo CisJCQkJc2VsZWN0IGJvb2xfYW5kKGNvbmZsaWN0aW5nKSBmcm9tIHBnX3JlcGxpY2F0aW9u X3Nsb3RzOykpOworCisJaXMoJHJlcywgJ3QnLAorCQkiTG9naWNhbCBzbG90IGlzIHJlcG9y dGVkIGFzIGNvbmZsaWN0aW5nIik7Cit9CisKKyRub2RlX3ByaW1hcnktPmluaXQoYWxsb3dz X3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsICJzdGFuZGJ5X3Nsb3RfbmFtZXMgPSAncHNsb3QxJyIpOwor JG5vZGVfcHJpbWFyeS0+c3RhcnQ7Ciskbm9kZV9wcmltYXJ5LT5wc3FsKCdwb3N0Z3Jlcycs IHF7U0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KCdwc2xvdDEn KTt9KTsKKworJG5vZGVfcHJpbWFyeS0+YmFja3VwKCdiYWNrdXAnKTsKKworJG5vZGVfcGh5 c19zdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnksICdiYWNrdXAnLCBo YXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfcGh5c19zdGFuZGJ5LT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJywgcXsKK3N5bmNocm9uaXplX3Nsb3RfbmFtZXMgPSAnKicKK3By aW1hcnlfc2xvdF9uYW1lID0gJ3BzbG90MScKK2hvdF9zdGFuZGJ5X2ZlZWRiYWNrID0gb2Zm Cit9KTsKKworJG5vZGVfcGh5c19zdGFuZGJ5LT5zdGFydDsKKworJG5vZGVfcHJpbWFyeS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdDEgKGEgaW50IFBSSU1BUlkg S0VZKSIpOworJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0MSBWQUxVRVMgKDEpLCAoMiksICgzKSIpOworCisjIFNvbWUgdGVzdHMgbmVlZCB0 byB3YWl0IGZvciBWQUNVVU0gdG8gYmUgcmVwbGF5ZWQuIEJ1dCB2YWN1dW0gZG9lcyBub3Qg Zmx1c2gKKyMgV0FMLiBBbiBpbnNlcnQgaW50byBmbHVzaF93YWwgb3V0c2lkZSB0cmFuc2Fj dGlvbiBkb2VzIGd1YXJhbnRlZSBhIGZsdXNoLgorJG5vZGVfcHJpbWFyeS0+cHNxbCgncG9z dGdyZXMnLCBxW0NSRUFURSBUQUJMRSBmbHVzaF93YWwoKTtdKTsKKworJG5vZGVfc3Vic2Ny aWJlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5zdGFydDsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdDEgKGEgaW50IFBSSU1BUlkgS0VZKSIpOworCiskbm9kZV9w cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBUQUJMRSB0MSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBDT05ORUNUSU9OICciIC4gKCRub2Rl X3ByaW1hcnktPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3JlcycpIC4gIicgUFVCTElDQVRJ T04gcHViMSIpOworCisjIFdhaXQgZm9yIGluaXRpYWwgc3luYyBvZiBhbGwgc3Vic2NyaXB0 aW9ucworbXkgJHN5bmNlZF9xdWVyeSA9CisgICJTRUxFQ1QgY291bnQoMSkgPSAwIEZST00g cGdfc3Vic2NyaXB0aW9uX3JlbCBXSEVSRSBzcnN1YnN0YXRlIE5PVCBJTiAoJ3InLCAncycp OyI7Ciskbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRz eW5jZWRfcXVlcnkpCisgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN1 YnNjcmliZXIgdG8gc3luY2hyb25pemUgZGF0YSI7CisKK215ICRyZXN1bHQgPSAkbm9kZV9w cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHNsb3RfbmFtZSwgcGx1 Z2luLCBkYXRhYmFzZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzIFdIRVJFIHNsb3RfdHlw ZSA9ICdsb2dpY2FsJyIpOworCitpcygkcmVzdWx0LCBxcShzdWIxfHBnb3V0cHV0fHBvc3Rn cmVzKSwgJ2xvZ2ljYWwgc2xvdCBvbiBwcmltYXJ5Jyk7CisKKyMgRklYTUU6IHN0YW5kYnkg bmVlZHMgcmVzdGFydCB0byBwaWNrIHVwIG5ldyBzbG90cworJG5vZGVfcGh5c19zdGFuZGJ5 LT5yZXN0YXJ0Oworc2xlZXAgMzsKKworJHJlc3VsdCA9ICRub2RlX3BoeXNfc3RhbmRieS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBzbG90X25hbWUsIHBsdWdpbiwgZGF0 YWJhc2UgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyIpOworCitpcygkcmVzdWx0LCBxcShz dWIxfHBnb3V0cHV0fHBvc3RncmVzKSwgJ2xvZ2ljYWwgc2xvdCBvbiBzdGFuZGJ5Jyk7CisK KyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdDEg VkFMVUVTICg0KSwgKDUpLCAoNikiKTsKKyRub2RlX3ByaW1hcnktPndhaXRfZm9yX2NhdGNo dXAoJ3N1YjEnKTsKKworJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3JfY2F0Y2h1cCgkbm9kZV9w aHlzX3N0YW5kYnktPm5hbWUpOworCisjIExvZ2ljYWwgc3Vic2NyaWJlciBhbmQgcGh5c2lj YWwgcmVwbGljYSBhcmUgY2F1Z2h0IHVwIGF0IHRoaXMgcG9pbnQuCisKKyMgRHJvcCB0aGUg c3Vic2NyaXB0aW9uIHNvIHRoYXQgY2F0YWxvZ194bWluIGlzIHVua25vd24gb24gdGhlIHBy aW1hcnkKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBT VUJTQ1JJUFRJT04gc3ViMSIpOworCisjIFRoaXMgc2hvdWxkIHRyaWdnZXIgYSBjb25mbGlj dCBhcyBob3Rfc3RhbmRieV9mZWVkYmFjayBpcyBvZmYgb24gdGhlIHN0YW5kYnkKKyRub2Rl X3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKKyAgQ1JFQVRFIFRBQkxFIGNv bmZsaWN0X3Rlc3QoeCBpbnRlZ2VyLCB5IHRleHQpOworICBEUk9QIFRBQkxFIGNvbmZsaWN0 X3Rlc3Q7CisgIFZBQ1VVTSBmdWxsIHBnX2NsYXNzOworICBJTlNFUlQgSU5UTyBmbHVzaF93 YWwgREVGQVVMVCBWQUxVRVM7IC0tIHNlZSBjcmVhdGUgdGFibGUgZmx1c2hfd2FsCitdKTsK KworIyBFbnN1cmUgcGh5c2ljYWwgcmVwbGF5IGNhdGNoZXMgdXAKKyRub2RlX3ByaW1hcnkt PndhaXRfZm9yX2NhdGNodXAoJG5vZGVfcGh5c19zdGFuZGJ5KTsKKworIyBDaGVjayBpbnZh bGlkYXRpb24gaW4gdGhlIGxvZ2ZpbGUKK2NoZWNrX2Zvcl9pbnZhbGlkYXRpb24oMSwgJ3dp dGggdmFjdXVtIEZVTEwgb24gcGdfY2xhc3MnKTsKKworIyBDaGVjayBjb25mbGljdGluZyBz dGF0dXMgaW4gcGdfcmVwbGljYXRpb25fc2xvdHMuCitjaGVja19zbG90c19jb25mbGljdGlu Z19zdGF0dXMoKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --------------CtMnbI3Uj1zRZxQw74CLnZI0--