From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16708 invoked by alias); 25 Aug 2012 00:34:54 -0000 Received: (qmail 14285 invoked by uid 22791); 25 Aug 2012 00:34:44 -0000 X-SWARE-Spam-Status: No, hits=-4.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_AV,TW_CF,TW_CP,TW_FN,TW_MX,TW_TM,URIBL_DBL_REDIR X-Spam-Check-By: sourceware.org Received: from mail-ob0-f175.google.com (HELO mail-ob0-f175.google.com) (209.85.214.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 25 Aug 2012 00:34:20 +0000 Received: by obc16 with SMTP id 16so6068527obc.20 for ; Fri, 24 Aug 2012 17:34:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=xp5URN6ZquGY8fAcDB4Madrf8zA5YrHSFnlr9AZ7tfU=; b=ZuqhbC7MjdwutdAciFtoyOVTxK8y5pusT5Y8tmQKINbuqrR5rCH42NN4qVUR27+PMq DF0blIqQhTZ70CpmPpvNCu09+cDjbDpnJx9CRzgayKcUdxNbeojvmzK4Tc8EsOyAzL5+ glauufQV6e0rgzRfZq5HvFqur0OZS+oImomBeWth0TjwmvpL8d1seWXE8uwHvZIruhxB fAgnPOw++ySC5lGILZvXJXhNdZM40t/r0fBLcM9DHkJcnTxnreb9QNMV121hjAvT5YS6 A2oipuYU10sVkbQ22uwZ1gUEPzPqz7flGcgP7W1hMX7/oPb0JB20jfoMNIvk0qQShcdf 6uow== Received: by 10.182.52.105 with SMTP id s9mr5407151obo.25.1345854859048; Fri, 24 Aug 2012 17:34:19 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.52.105 with SMTP id s9mr5407129obo.25.1345854858741; Fri, 24 Aug 2012 17:34:18 -0700 (PDT) Received: by 10.182.58.193 with HTTP; Fri, 24 Aug 2012 17:34:18 -0700 (PDT) In-Reply-To: References: <20120307004630.A503DB21B6@azwildcat.mtv.corp.google.com> <4FF7D1C6.90407@redhat.com> <4FF96D0C.5060406@redhat.com> <4FFBF9F5.6020306@redhat.com> <5008708E.1030109@redhat.com> Date: Sat, 25 Aug 2012 00:34:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: Jason Merrill Cc: Xinliang David Li , mark@codesourcery.com, nathan@codesourcery.com, "H.J. Lu" , Richard Guenther , Jan Hubicka , Uros Bizjak , reply@codereview.appspotmail.com, gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary=14dae9399429c6472c04c80c4054 X-System-Of-Record: true X-Gm-Message-State: ALoCoQkwGgz6iZNvFOXqDIqsc9kjTaPLRg96l9iVYrMQ8IUceEfukqo8l+W/G4HB336vnxpk8+Qmut+yEa/xU7ILvqPGi2llh4yVlz4Pkr0WYj9U7pv/M4e5Aej4fuOhRhoaTX777f5/PeoaBpn9AIWVsOjPMR3qGoErJnp0g1eMuE+a5hIgJyeiejRxmXO74PCOZHIhfgfj X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-08/txt/msg01717.txt.bz2 --14dae9399429c6472c04c80c4054 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2859 Hi Jason, I have created a new patch to use target hooks for all the functionality and make the front-end just call the target hooks at the appropriate places. This is more like what you suggested in a previous mail. In particular, target hooks address the following questions: * Determine if two function decls with the same signature are versions. * Determine the new assembler name of a function version. * Generate the dispatcher function for a set of function versions. * Compare versions to see if one has a higher priority over the other. Patch attached and also available for review at: http://codereview.appspot.com/5752064/ Hope this is more along the lines of what you had in mind, please let me know what you think. Thanks, -Sri. On Mon, Jul 30, 2012 at 12:01 PM, Sriraman Tallam wro= te: > On Thu, Jul 19, 2012 at 1:39 PM, Jason Merrill wrote: >> >> On 07/10/2012 03:14 PM, Sriraman Tallam wrote: >>> >>> I am using the questions you asked previously >>> to explain how I solved each of them. When working on this patch, these >>> are the exact questions I had and tried to address it. >>> >>> * Does this attribute affect a function signature? >>> >>> The function signature should be changed when there is more than one >>> definition/declaration of foo distinguished by unique target attributes. >> >> >[...] >> >> I agree. I was trying to suggest that these questions are what the fron= t end needs to care about, not about versioning specifically. If these que= stions are turned into target hooks, all of the logic specific to versionin= g can be contained in the target. >> >> My only question intended to be answered by humans is, do people think m= oving the versioning logic behind more generic target hooks is worthwhile? > > I have some comments related > > For the example below, > > // Default version. > int foo () > { > ..... > } > > // Version XXX feature supported by Target ABC. > int foo __attribute__ ((target ("XXX"))) > { > .... > } > > How should the second version of foo be treated for targets where > feature XXX is not supported? Right now, I am working on having my > patch completely ignore such function versions when compiled for > targets that do not understand the attribute. I could move this check > into a generic target hook so that a function definition that does not > make sense for the current target is ignored. > > Also, currently the patch uses target hooks to do the following: > > - Find if a particular version can be called directly, rather than go > through the dispatcher. > - Determine what the dispatcher body should be. > - Determining the order in which function versions must be dispatched. > > I do not have a strong opinion on whether the entire logic should be > based on target hooks. > > Thanks, > -Sri. > >> >> >> >> Jason --14dae9399429c6472c04c80c4054 Content-Type: text/plain; charset=US-ASCII; name="mv_fe_patch_new.txt" Content-Disposition: attachment; filename="mv_fe_patch_new.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h69z711q0 Content-length: 101476 T3ZlcnZpZXcgb2YgdGhlIHBhdGNoIHdoaWNoIGFkZHMgc3VwcG9ydCB0byBz cGVjaWZ5IGZ1bmN0aW9uIHZlcnNpb25zLiAgVGhpcyBpcwpvbmx5IGVuYWJs ZWQgZm9yIHRhcmdldCBpMzg2LgoKRXhhbXBsZToKCmludCBmb28gKCk7ICAv KiBEZWZhdWx0IHZlcnNpb24gKi8KaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0KCJhdngscG9wY250IikpKTsvKlNwZWNpYWxpemVkIGZvciBh dnggYW5kIHBvcGNudCAqLwppbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImFyY2g9Y29yZTIsc3NzZTMiKSkpOy8qU3BlY2lhbGl6ZWQgZm9y IGNvcmUyIGFuZCBzc3NlMyovCgppbnQgbWFpbiAoKQp7CiBpbnQgKCpwKSgp ID0gJmZvbzsKIHJldHVybiBmb28gKCkgKyAoKnApKCk7Cn0KCmludCBmb28g KCkKewogcmV0dXJuIDA7Cn0KCmludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0 KCJhdngscG9wY250IikpKQpmb28gKCkKewogcmV0dXJuIDA7Cn0KCmludCBf X2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUyLHNzc2UzIikpKQpm b28gKCkKewogcmV0dXJuIDA7Cn0KClRoZSBhYm92ZSBleGFtcGxlIGhhcyBm b28gZGVmaW5lZCAzIHRpbWVzLCBidXQgYWxsIDMgZGVmaW5pdGlvbnMgb2Yg Zm9vIGFyZQpkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rp b24uIFRoZSBjYWxsIHRvIGZvbyBpbiBtYWluLCBkaXJlY3RseSBhbmQKdmlh IGEgcG9pbnRlciwgYXJlIGNhbGxzIHRvIHRoZSBtdWx0aS12ZXJzaW9uZWQg ZnVuY3Rpb24gZm9vIHdoaWNoIGlzIGRpc3BhdGNoZWQKdG8gdGhlIHJpZ2h0 IGZvbyBhdCBydW4tdGltZS4KCkZyb250LWVuZCBjaGFuZ2VzOgoKVGhlIGZy b250LWVuZCBjaGFuZ2VzIGFyZSBjYWxscyBhdCBhcHByb3ByaWF0ZSBwbGFj ZXMgdG8gdGFyZ2V0IGhvb2tzIHRoYXQKZGV0ZXJtaW5lIHRoZSBmb2xsb3dp bmc6CgoqIERldGVybWluZSBpZiB0d28gZnVuY3Rpb24gZGVjbHMgd2l0aCB0 aGUgc2FtZSBzaWduYXR1cmUgYXJlIHZlcnNpb25zLgoqIERldGVybWluZSB0 aGUgYXNzZW1ibGVyIG5hbWUgb2YgYSBmdW5jdGlvbiB2ZXJzaW9uLgoqIEdl bmVyYXRlIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGZvciBhIHNldCBvZiBm dW5jdGlvbiB2ZXJzaW9ucy4KKiBDb21wYXJlIHZlcnNpb25zIHRvIHNlZSBp ZiBvbmUgaGFzIGEgaGlnaGVyIHByaW9yaXR5IG92ZXIgdGhlIG90aGVyLgoK QWxsIHRoZSBpbXBsZW1lbnRhdGlvbiBoYXBwZW5zIGluIHRoZSB0YXJnZXQt c3BlY2lmaWMgY29uZmlnL2kzODYvaTM4Ni5jLgoKV2hhdCBkb2VzIHRoZSBw YXRjaCBkbz8KCiogVHJhY2tpbmcgZGVjbHMgdGhhdCBjb3JyZXNwb25kIHRv IGZ1bmN0aW9uIHZlcnNpb25zIG9mIGZ1bmN0aW9uCm5hbWUsIHNheSAiZm9v IjoKCldoZW4gdGhlIGZyb250LWVuZCBzZWVzIG1vcmUgdGhhbiBvbmUgZGVj bCBmb3IgImZvbyIsIGl0IGNhbGxzIGEgdGFyZ2V0IGhvb2sgdG8KZGV0ZXJt aW5lIGlmIHRoZXkgYXJlIHZlcnNpb25zLiBUbyBwcmV2ZW50IGR1cGxpY2F0 ZSBkZWZpbml0aW9uIGVycm9ycyB3aXRoIG90aGVyCiB2ZXJzaW9ucyBvZiAi Zm9vIiwgImRlY2xzX21hdGNoIiBmdW5jdGlvbiBpbiBjcC9kZWNsLmMgaXMg bWFkZSB0byByZXR1cm4gZmFsc2UKIHdoZW4gMiBkZWNscyBoYXZlIGFyZSBk ZWVtZWQgdmVyc2lvbnMgYnkgdGhlIHRhcmdldC4gVGhpcyB3aWxsIG1ha2Ug YWxsIGZ1bmN0aW9uCnZlcnNpb25zIG9mICJmb28iIHRvIGJlIGFkZGVkIHRv IHRoZSBvdmVybG9hZCBsaXN0IG9mICJmb28iLgoKKiBDaGFuZ2UgdGhlIGFz c2VtYmxlciBuYW1lcyBvZiB0aGUgZnVuY3Rpb24gdmVyc2lvbnMuCgpGb3Ig aTM4NiwgdGhlIHRhcmdldCBjaGFuZ2VzIHRoZSBhc3NlbWJsZXIgbmFtZXMg b2YgdGhlIGZ1bmN0aW9uIHZlcnNpb25zIGJ5CiBzdWZmaXhpbmcgdGhlIHNv cnRlZCBsaXN0IG9mIGFyZ3MgdG8gInRhcmdldCIgdG8gdGhlIGZ1bmN0aW9u IG5hbWUgb2YgImZvbyIuIEZvcgpleGFtcGxlLCBoZSBhc3NlbWJsZXIgbmFt ZSBvZiAidm9pZCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNz ZTQiKSkpIiB3aWxsCmJlY29tZSBfWjNmb292LnNzZTQuCgoqIE92ZXJsb2Fk IHJlc29sdXRpb246CgogRnVuY3Rpb24gImJ1aWxkX292ZXJfY2FsbCIgaW4g Y3AvY2FsbC5jIHNlZXMgYSBjYWxsIHRvIGZ1bmN0aW9uCiJmb28iLCB3aGlj aCBpcyBtdWx0aS12ZXJzaW9uZWQuIFRoZSBvdmVybG9hZCByZXNvbHV0aW9u IGhhcHBlbnMgaW4KZnVuY3Rpb24gImpvdXN0IiBpbiAiY3AvY2FsbC5jIi4g SGVyZSwgdGhlIGNhbGwgdG8gImZvbyIgaGFzIGFsbApwb3NzaWJsZSB2ZXJz aW9ucyBvZiAiZm9vIiBhcyBjYW5kaWRhdGVzLiBBbGwgdGhlIGNhbmRpZGF0 ZXMgb2YgImZvbyIgYXJlCnN0b3JlZCBpbiB0aGUgY2dyYXBoIGRhdGEgc3Ry dWN0dXJlcy4gRWFjaCB2ZXJzaW9uIG9mIGZvbyBpcyBjaGFpbmVkIGluIGEg CmRvdWJseS1saW5rZWQgbGlzdCB3aXRoIHRoZSBkZWZhdWx0IGZ1bmN0aW9u IGFzIHRoZSBmaXJzdCBlbGVtZW50LiAgVGhpcyBhbGxvd3MKYW55IHBhc3Mg dG8gYWNjZXNzIGFsbCB0aGUgc2VtYW50aWNhbGx5IGlkZW50aWNhbCB2ZXJz aW9ucy4gQSBjYWxsIHRvIGEKbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uIHdp bGwgYmUgcmVwbGFjZWQgYnkgYSBjYWxsIHRvIGEgZGlzcGF0Y2hlciBmdW5j dGlvbiwKZGV0ZXJtaW5lZCBieSBhIHRhcmdldCBob29rLCB0byBleGVjdXRl IHRoZSByaWdodCBmdW5jdGlvbiB2ZXJzaW9uIGF0IHJ1bi10aW1lLgoKT3B0 aW1pemF0aW9uIHRvIGRpcmVjdGx5IGNhbGwgYSB2ZXJzaW9uIHdoZW4gcG9z c2libGU6CkFsc28sIGluIGpvdXN0LCB3aGVyZSBvdmVybG9hZCByZXNvbHV0 aW9uIGhhcHBlbnMsIGEgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24KcmVzb2x1 dGlvbiBpcyBtYWRlIHRvIHJldHVybiB0aGUgbW9zdCBzcGVjaWFsaXplZCB2 ZXJzaW9uLiAgVGhpcyBpcyB0aGUgdmVyc2lvbgp0aGF0IHdpbGwgYmUgY2hl Y2tlZCBmb3IgZGlzcGF0Y2hpbmcgZmlyc3QgYW5kIGlzIGRldGVybWluZWQg YnkgdGhlIHRhcmdldC4KTm93LCBpZiB0aGUgY2FsbGVyIGNhbiBpbmxpbmUg dGhpcyBmdW5jdGlvbiB2ZXJzaW9uIHRoZW4gYSBkaXJlY3QgY2FsbCBpcyBt YWRlCnRvIHRoaXMgZnVuY3Rpb24gdmVyc2lvbiByYXRoZXIgdGhhbiBnbyB0 aHJvdWdoIHRoZSBkaXNwYXRjaGVyLiBXaGVuIGEgZGlyZWN0CmNhbGwgY2Fu bm90IGJlIG1hZGUsIGEgY2FsbCB0byB0aGUgZGlzcGF0Y2hlciBmdW5jdGlv biBpcyBjcmVhdGVkLgoKKiBDcmVhdGluZyB0aGUgZGlzcGF0Y2hlciBib2R5 LgoKVGhlIGRpc3BhdGNoZXIgYm9keSwgY2FsbGVkIHRoZSByZXNvbHZlciBp cyBtYWRlIG9ubHkgd2hlbiB0aGVyZSBpcyBhIGNhbGwgdG8gYQptdWx0aXZl cnNpb25lZCBmdW5jdGlvbiBkaXNwYXRjaGVyIG9yIHRoZSBhZGRyZXNzIG9m IGEgZnVuY3Rpb24gaXMgdGFrZW4uIFRoaXMKaXMgZ2VuZXJhdGVkIGR1cmlu ZyBidWlsZF9jZ3JhcGhfZWRnZXMgZm9yIGEgY2FsbCBvciBjZ3JhcGhfbWFy a19hZGRyZXNzX3Rha2VuCmZvciBhIHBvaW50ZXIgcmVmZXJlbmNlLiBUaGlz IGlzIGRvbmUgYnkgYW5vdGhlciB0YXJnZXQgaG9vay4KCiogRGlzcGF0Y2gg b3JkZXJpbmcuCgpUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIGZ1bmN0aW9uIHZl cnNpb25zIGFyZSBjaGVja2VkIGR1cmluZyBkaXNwYXRjaCBpcyBiYXNlZApv biBhIHByaW9yaXR5IHZhbHVlIGFzc2lnbmVkIGZvciB0aGUgSVNBIHRoYXQg aXMgY2F0ZXJlZC4gTW9yZSBzcGVjaWFsaXplZCAKdmVyc2lvbnMgYXJlIGNo ZWNrZWQgZm9yIGRpc3BhdGNoaW5nIGZpcnN0LiAgVGhpcyBpcyB0byBtaXRp Z2F0ZSB0aGUgYW1iaWd1aXR5CnRoYXQgY2FuIGFyaXNlIHdoZW4gbW9yZSB0 aGFuIG9uZSBmdW5jdGlvbiB2ZXJzaW9uIGlzIHZhbGlkIGZvciBleGVjdXRp b24gb24KYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLiAgVGhpcyBpcyBub3QgYSBw ZXJmZWN0IHNvbHV0aW9uIGFuZCBpbiBmdXR1cmUsIHRoZSB1c2VyCnNob3Vs ZCBiZSBhbGxvd2VkIHRvIGFzc2lnbiBhIGRpc3BhdGNoaW5nIHByaW9yaXR5 IHZhbHVlIHRvIGVhY2ggdmVyc2lvbi4KCgoKCSogZG9jL3RtLnRleGkuaW4g KFRBUkdFVF9PUFRJT05fRlVOQ1RJT05fVkVSU0lPTlMpOiBOZXcgaG9vayBk ZXNjcmlwdGlvbi4KCSogKFRBUkdFVF9DT01QQVJFX1ZFUlNJT05fUFJJT1JJ VFkpOiBOZXcgaG9vayBkZXNjcmlwdGlvbi4KCSogKFRBUkdFVF9TRVRfVkVS U0lPTl9BU1NFTUJMRVJfTkFNRSk6IE5ldyBob29rIGRlc2NyaXB0aW9uLgoJ KiAoVEFSR0VUX0dFVF9GVU5DVElPTl9WRVJTSU9OU19ESVNQQVRDSEVSKTog TmV3IGhvb2sgZGVzY3JpcHRpb24uCgkqIChUQVJHRVRfR0VORVJBVEVfVkVS U0lPTl9ESVNQQVRDSEVSX0JPRFkpOiBOZXcgaG9vayBkZXNjcmlwdGlvbi4K CSogZG9jL3RtLnRleGk6IFJlZ2VuZXJhdGUuCgkqIGNncmFwaGJ1aWxkLmMg KGJ1aWxkX2NncmFwaF9lZGdlcyk6IEdlbmVyYXRlIGJvZHkgb2YgbXVsdGl2 ZXJzaW9uCglmdW5jdGlvbiBkaXNwYXRjaGVyLgoJKiBjLWZhbWlseS9jLWNv bW1vbi5jIChoYW5kbGVfdGFyZ2V0X2F0dHJpYnV0ZSk6IFdhcm4gZm9yIGlu dmFsaWQgYXR0cmlidXRlcy4KCSogdGFyZ2V0LmRlZiAoY29tcGFyZV92ZXJz aW9uX3ByaW9yaXR5KTogTmV3IHRhcmdldCBob29rLgoJKiAoc2V0X3ZlcnNp b25fYXNzZW1ibGVyX25hbWUpOiBOZXcgdGFyZ2V0IGhvb2suCgkqIChnZW5l cmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9keSk6IE5ldyB0YXJnZXQgaG9v ay4KCSogKGdldF9mdW5jdGlvbl92ZXJzaW9uc19kaXNwYXRjaGVyKTogTmV3 IHRhcmdldCBob29rLgoJKiAoZnVuY3Rpb25fdmVyc2lvbnMpOiBOZXcgdGFy Z2V0IGhvb2suCgkqIGNncmFwaC5jIChjZ3JhcGhfbWFya19hZGRyZXNzX3Rh a2VuX25vZGUpOiBHZW5lcmF0ZSBib2R5IG9mIG11bHRpdmVyc2lvbgoJZnVu Y3Rpb24gZGlzcGF0Y2hlci4KCSogY2dyYXBoLmggKGNncmFwaF9ub2RlKTog TmV3IG1lbWJlcnMgdmVyc2lvbl9kaXNwYXRjaGVyX2RlY2wsCglwcmV2X2Z1 bmN0aW9uX3ZlcnNpb24sIG5leHRfZnVuY3Rpb25fdmVyc2lvbiwgZGlzcGF0 Y2hlcl9mdW5jdGlvbi4KCSogdHJlZS5oIChERUNMX0ZVTkNUSU9OX1ZFUlNJ T05FRCk6IE5ldyBtYWNyby4KCSh0cmVlX2Z1bmN0aW9uX2RlY2wpOiBOZXcg Yml0LWZpZWxkIHZlcnNpb25lZF9mdW5jdGlvbi4KCSogdGVzdHN1aXRlL2cr Ky5kZy9tdjEuQzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9nKysuZGcvbXYy LkM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvZysrLmRnL212My5DOiBOZXcg dGVzdC4KCSogdGVzdHN1aXRlL2crKy5kZy9tdjQuQzogTmV3IHRlc3QuCgkq IGNwL2NsYXNzLmM6CgkoYWRkX21ldGhvZCk6IENoYW5nZSBhc3NlbWJsZXIg bmFtZXMgb2YgZnVuY3Rpb24gdmVyc2lvbnMuCgkocmVzb2x2ZV9hZGRyZXNz X29mX292ZXJsb2FkZWRfZnVuY3Rpb24pOiBTYXZlIGFsbCBmdW5jdGlvbgoJ dmVyc2lvbiBjYW5kaWRhdGVzLiBDcmVhdGUgZGlzcGF0Y2hlciBkZWNsIGFu ZCByZXR1cm4gYWRkcmVzcyBvZgoJZGlzcGF0Y2hlciBpbnN0ZWFkLgoJKiBj cC9kZWNsLmMgKGRlY2xzX21hdGNoKTogTWFrZSBkZWNscyB1bm1hdGNoZWQg Zm9yIHZlcnNpb25lZAoJZnVuY3Rpb25zLgoJKGR1cGxpY2F0ZV9kZWNscyk6 IFJlbW92ZSBhbWJpZ3VpdHkgZm9yIHZlcnNpb25lZCBmdW5jdGlvbnMuIAoJ KGN4eF9jb21kYXRfZ3JvdXApOiBNYWtlIGNvbWRhdCBncm91cCBvZiB2ZXJz aW9uZWQgZnVuY3Rpb25zIGJlIHRoZQoJc2FtZS4KCSogY3AvZXJyb3IuYyAo ZHVtcF9leGNlcHRpb25fc3BlYyk6IER1bXAgYXNzZW1ibGVyIG5hbWUgZm9y IGZ1bmN0aW9uCgl2ZXJzaW9ucy4KCSogY3Avc2VtYW50aWNzLmMgKGV4cGFu ZF9vcl9kZWZlcl9mbl8xKTogTWFyayBhcyBuZWVkZWQgdmVyc2lvbmVkCglm dW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBtYXJrZWQgaW5saW5lLgoJKiBjcC9k ZWNsMi5jOihjaGVja19jbGFzc2ZuKTogQ2hlY2sgYXR0cmlidXRlcyBvZiB2 ZXJzaW9uZWQgZnVuY3Rpb25zCglmb3IgbWF0Y2guCgkqIGNwL2NhbGwuYzog KGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogQ2hlY2sgaWYgdmVyc2lvbmVk IGZ1bmN0aW9ucwoJaGF2ZSBhIGRlZmF1bHQgdmVyc2lvbi4KCShidWlsZF9v dmVyX2NhbGwpOiBNYWtlIGNhbGxzIHRvIG11bHRpdmVyc2lvbmVkIGZ1bmN0 aW9ucwoJdG8gY2FsbCB0aGUgZGlzcGF0Y2hlci4KCShqb3VzdCk6IEZvciBj YWxscyB0byBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb25zLCBtYWtlIHRoZSBt b3N0CglzcGVjaWFsaXplZCBmdW5jdGlvbiB2ZXJzaW9uIHdpbi4KCSh0b3Vy bmV5KTogR2VuZXJhdGUgZGlzcGF0Y2hlciBkZWNsIGZvciBmdW5jdGlvbiB2 ZXJzaW9ucy4KCSogY3AvbWFuZ2xlLmMgKHdyaXRlX3VucXVhbGlmaWVkX25h bWUpOiBVc2UgYXNzZW1ibGVyIG5hbWUgZm9yCgl2ZXJzaW9uZWQgZnVuY3Rp b25zLgoJKiBNYWtlZmlsZS5pbjogQWRkIG11bHRpdmVyc2lvbi5vCgkqIGNv bmZpZy9pMzg2L2kzODYuYyAoYWRkX2NvbmRpdGlvbl90b19iYik6IE5ldyBm dW5jdGlvbi4KCShnZXRfYnVpbHRpbl9jb2RlX2Zvcl92ZXJzaW9uKTogTmV3 IGZ1bmN0aW9uLgoJKGl4ODZfY29tcGFyZV92ZXJzaW9uX3ByaW9yaXR5KTog TmV3IGZ1bmN0aW9uLgoJKGZlYXR1cmVfY29tcGFyZSk6IE5ldyBmdW5jdGlv bi4KCShkaXNwYXRjaF9mdW5jdGlvbl92ZXJzaW9ucyk6IE5ldyBmdW5jdGlv bi4KCSogKGl4ODZfZnVuY3Rpb25fdmVyc2lvbnMpOk5ldyBmdW5jdGlvbi4K CSogKGF0dHJfc3RyY21wKTpOZXcgZnVuY3Rpb24uCgkqIChzb3J0ZWRfYXR0 cl9zdHJpbmcpOk5ldyBmdW5jdGlvbi4KCSogKGl4ODZfc2V0X3ZlcnNpb25f YXNzZW1ibGVyX25hbWUpOk5ldyBmdW5jdGlvbi4KCSogKG1ha2VfbmFtZSk6 TmV3IGZ1bmN0aW9uLgoJKiAobWFrZV9kaXNwYXRjaGVyX2RlY2wpOk5ldyBm dW5jdGlvbi4KCSogKGlzX2Z1bmN0aW9uX2RlZmF1bHRfdmVyc2lvbik6TmV3 IGZ1bmN0aW9uLgoJKiAoaXg4Nl9nZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlz cGF0Y2hlcik6TmV3IGZ1bmN0aW9uLgoJKiAobWFrZV9hdHRyaWJ1dGUpOk5l dyBmdW5jdGlvbi4KCSogKG1ha2VfcmVzb2x2ZXJfZnVuYyk6TmV3IGZ1bmN0 aW9uLgoJKiAoaXg4Nl9nZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9k eSk6TmV3IGZ1bmN0aW9uLgoJKiAoVEFSR0VUX0NPTVBBUkVfVkVSU0lPTl9Q UklPUklUWSk6TmV3IG1hY3JvLgoJKiAoVEFSR0VUX1NFVF9WRVJTSU9OX0FT U0VNQkxFUl9OQU1FKTpOZXcgbWFjcm8uCgkqIChUQVJHRVRfR0VUX0ZVTkNU SU9OX1ZFUlNJT05TX0RJU1BBVENIRVIpOk5ldyBtYWNyby4KCSogKFRBUkdF VF9HRU5FUkFURV9WRVJTSU9OX0RJU1BBVENIRVJfQk9EWSk6TmV3IG1hY3Jv LgoJKiAoVEFSR0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUyk6TmV3IG1h Y3JvLgoKSW5kZXg6IGdjYy9kb2MvdG0udGV4aQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvZG9jL3RtLnRleGkJKHJldmlzaW9uIDE5MDQ5MykK KysrIGdjYy9kb2MvdG0udGV4aQkod29ya2luZyBjb3B5KQpAQCAtOTg5NCw2 ICs5ODk0LDExIEBAIGNoYW5nZWQgdmlhIHRoZSBvcHRpbWl6ZSBhdHRyaWJ1 dGUgb3IgcHJhZ21hLCBzZWUKIEBjb2Rle1RBUkdFVF9PVkVSUklERV9PUFRJ T05TX0FGVEVSX0NIQU5HRX0KIEBlbmQgZGVmdHlwZWZuCiAKK0BkZWZ0eXBl Zm4ge1RhcmdldCBIb29rfSBib29sIFRBUkdFVF9PUFRJT05fRlVOQ1RJT05f VkVSU0lPTlMgKHRyZWUgQHZhcntkZWNsMX0sIHRyZWUgQHZhcntkZWNsMn0p CitUaGlzIHRhcmdldCBob29rIHJldHVybnMgQGNvZGV7dHJ1ZX0gaWYgQHZh cntGTjF9IGFuZCBAdmFye0ZOMn0gYXJlCit2ZXJzaW9ucyBvZiB0aGUgc2Ft ZSBmdW5jdGlvbi4KK0BlbmQgZGVmdHlwZWZuCisKIEBkZWZ0eXBlZm4ge1Rh cmdldCBIb29rfSBib29sIFRBUkdFVF9DQU5fSU5MSU5FX1AgKHRyZWUgQHZh cntjYWxsZXJ9LCB0cmVlIEB2YXJ7Y2FsbGVlfSkKIFRoaXMgdGFyZ2V0IGhv b2sgcmV0dXJucyBAY29kZXtmYWxzZX0gaWYgdGhlIEB2YXJ7Y2FsbGVyfSBm dW5jdGlvbgogY2Fubm90IGlubGluZSBAdmFye2NhbGxlZX0sIGJhc2VkIG9u IHRhcmdldCBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gIEJ5CkBAIC0xMDkyNSw2 ICsxMDkzMCwzMiBAQCBUaGUgcmVzdWx0IGlzIGFub3RoZXIgdHJlZSBjb250 YWluaW5nIGEgc2ltcGxpZmllZAogY2FsbCdzIHJlc3VsdC4gIElmIEB2YXJ7 aWdub3JlfSBpcyB0cnVlIHRoZSB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuCiBA ZW5kIGRlZnR5cGVmbgogCitAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gaW50 IFRBUkdFVF9DT01QQVJFX1ZFUlNJT05fUFJJT1JJVFkgKHRyZWUgQHZhcntk ZWNsMX0sIHRyZWUgQHZhcntkZWNsMn0pCitUaGlzIGhvb2sgaXMgdXNlZCB0 byBjb21wYXJlIHRoZSB0YXJnZXQgYXR0cmlidXRlcyBpbiB0d28gZnVuY3Rp b25zIHRvCitmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uJ3MgZmVhdHVyZXMg Z2V0IGhpZ2hlciBwcmlvcml0eS4gIFRoaXMgaXMgdXNlZAorZHVyaW5nIG11 bHRpLXZlcnNpb25pbmcgdG8gZmlndXJlIG91dCB0aGUgb3JkZXIgb2YgZGlz cGF0Y2hpbmcuIEB2YXJ7ZGVjbDF9CithbmQgQHZhcntkZWNsMn0gYXJlIHRo ZSB0d28gZnVuY3Rpb24gZGVjbHMgdGhhdCB3aWxsIGJlIGNvbXBhcmVkLgor QGVuZCBkZWZ0eXBlZm4KKworQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IHZv aWQgVEFSR0VUX1NFVF9WRVJTSU9OX0FTU0VNQkxFUl9OQU1FICh0cmVlIEB2 YXJ7ZGVjbH0pCitUaGlzIGhvb2sgaXMgZm9yIGdldHRpbmcgdGhlIG5ldyBh c3NlbWJsZXIgbmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgaXMKK2EgdmVyc2lv bi4KK0BlbmQgZGVmdHlwZWZuCisKK0BkZWZ0eXBlZm4ge1RhcmdldCBIb29r fSB0cmVlIFRBUkdFVF9HRVRfRlVOQ1RJT05fVkVSU0lPTlNfRElTUEFUQ0hF UiAodm9pZCAqQHZhcnthcmdsaXN0fSkKK1RoaXMgaG9vayBpcyB1c2VkIHRv IGdldCB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBmb3IgYSBzZXQgb2YgZnVu Y3Rpb24KK3ZlcnNpb25zLiAgVGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gaXMg Y2FsbGVkIHRvIGludm9rZSB0aGUgcmlnbnQgZnVuY3Rpb24KK3ZlcnNpb24g YXQgcnVuLXRpbWUuIEB2YXJ7YXJnbGlzdH0gaXMgdGhlIHZlY3RvciBvZiBm dW5jdGlvbiB2ZXJzaW9ucwordGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBm b3IgZGlzcGF0Y2guCitAZW5kIGRlZnR5cGVmbgorCitAZGVmdHlwZWZuIHtU YXJnZXQgSG9va30gdHJlZSBUQVJHRVRfR0VORVJBVEVfVkVSU0lPTl9ESVNQ QVRDSEVSX0JPRFkgKHZvaWQgKkB2YXJ7YXJnfSkKK1RoaXMgaG9vayBpcyB1 c2VkIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRjaGVyIGxvZ2ljIHRvIGludm9r ZSB0aGUgcmlnaHQKK2Z1bmN0aW9uIHZlcnNpb24gYXQgcnVudGltZSBmb3Ig YSBnaXZlbiBzZXQgb2YgZnVuY3Rpb24gdmVyc2lvbnMuCitAdmFye2FyZ30g cG9pbnRzIHRvIHRoZSBjYWxsZ3JhcGggbm9kZSBvZiB0aGUgZGlzcGF0Y2hl ciBmdW5jdGlvbiB3aG9zZQorYm9keSBtdXN0IGJlIGdlbmVyYXRlZC4KK0Bl bmQgZGVmdHlwZWZuCisKIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB7Y29u c3QgY2hhciAqfSBUQVJHRVRfSU5WQUxJRF9XSVRISU5fRE9MT09QIChjb25z dF9ydHggQHZhcntpbnNufSkKIAogVGFrZSBhbiBpbnN0cnVjdGlvbiBpbiBA dmFye2luc259IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2YWxpZCB3aXRo aW4gYQpJbmRleDogZ2NjL2RvYy90bS50ZXhpLmluCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9kb2MvdG0udGV4aS5pbgkocmV2aXNpb24gMTkw NDkzKQorKysgZ2NjL2RvYy90bS50ZXhpLmluCSh3b3JraW5nIGNvcHkpCkBA IC05NzYzLDYgKzk3NjMsMTEgQEAgY2hhbmdlZCB2aWEgdGhlIG9wdGltaXpl IGF0dHJpYnV0ZSBvciBwcmFnbWEsIHNlZQogQGNvZGV7VEFSR0VUX09WRVJS SURFX09QVElPTlNfQUZURVJfQ0hBTkdFfQogQGVuZCBkZWZ0eXBlZm4KIAor QGhvb2sgVEFSR0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUworVGhpcyB0 YXJnZXQgaG9vayByZXR1cm5zIEBjb2Rle3RydWV9IGlmIEB2YXJ7Rk4xfSBh bmQgQHZhcntGTjJ9IGFyZQordmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rp b24uCitAZW5kIGRlZnR5cGVmbgorCiBAaG9vayBUQVJHRVRfQ0FOX0lOTElO RV9QCiBUaGlzIHRhcmdldCBob29rIHJldHVybnMgQGNvZGV7ZmFsc2V9IGlm IHRoZSBAdmFye2NhbGxlcn0gZnVuY3Rpb24KIGNhbm5vdCBpbmxpbmUgQHZh cntjYWxsZWV9LCBiYXNlZCBvbiB0YXJnZXQgc3BlY2lmaWMgaW5mb3JtYXRp b24uICBCeQpAQCAtMTA3ODMsNiArMTA3ODgsMzIgQEAgVGhlIHJlc3VsdCBp cyBhbm90aGVyIHRyZWUgY29udGFpbmluZyBhIHNpbXBsaWZpZWQKIGNhbGwn cyByZXN1bHQuICBJZiBAdmFye2lnbm9yZX0gaXMgdHJ1ZSB0aGUgdmFsdWUg d2lsbCBiZSBpZ25vcmVkLgogQGVuZCBkZWZ0eXBlZm4KIAorQGhvb2sgVEFS R0VUX0NPTVBBUkVfVkVSU0lPTl9QUklPUklUWQorVGhpcyBob29rIGlzIHVz ZWQgdG8gY29tcGFyZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZXMgaW4gdHdvIGZ1 bmN0aW9ucyB0bworZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbidzIGZlYXR1 cmVzIGdldCBoaWdoZXIgcHJpb3JpdHkuICBUaGlzIGlzIHVzZWQKK2R1cmlu ZyBtdWx0aS12ZXJzaW9uaW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG9yZGVyIG9m IGRpc3BhdGNoaW5nLiBAdmFye2RlY2wxfQorYW5kIEB2YXJ7ZGVjbDJ9IGFy ZSB0aGUgdHdvIGZ1bmN0aW9uIGRlY2xzIHRoYXQgd2lsbCBiZSBjb21wYXJl ZC4KK0BlbmQgZGVmdHlwZWZuCisKK0Bob29rIFRBUkdFVF9TRVRfVkVSU0lP Tl9BU1NFTUJMRVJfTkFNRQorVGhpcyBob29rIGlzIGZvciBnZXR0aW5nIHRo ZSBuZXcgYXNzZW1ibGVyIG5hbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGlzCith IHZlcnNpb24uCitAZW5kIGRlZnR5cGVmbgorCitAaG9vayBUQVJHRVRfR0VU X0ZVTkNUSU9OX1ZFUlNJT05TX0RJU1BBVENIRVIKK1RoaXMgaG9vayBpcyB1 c2VkIHRvIGdldCB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBmb3IgYSBzZXQg b2YgZnVuY3Rpb24KK3ZlcnNpb25zLiAgVGhlIGRpc3BhdGNoZXIgZnVuY3Rp b24gaXMgY2FsbGVkIHRvIGludm9rZSB0aGUgcmlnbnQgZnVuY3Rpb24KK3Zl cnNpb24gYXQgcnVuLXRpbWUuIEB2YXJ7YXJnbGlzdH0gaXMgdGhlIHZlY3Rv ciBvZiBmdW5jdGlvbiB2ZXJzaW9ucwordGhhdCBzaG91bGQgYmUgY29uc2lk ZXJlZCBmb3IgZGlzcGF0Y2guCitAZW5kIGRlZnR5cGVmbgorCitAaG9vayBU QVJHRVRfR0VORVJBVEVfVkVSU0lPTl9ESVNQQVRDSEVSX0JPRFkKK1RoaXMg aG9vayBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRjaGVyIGxvZ2lj IHRvIGludm9rZSB0aGUgcmlnaHQKK2Z1bmN0aW9uIHZlcnNpb24gYXQgcnVu dGltZSBmb3IgYSBnaXZlbiBzZXQgb2YgZnVuY3Rpb24gdmVyc2lvbnMuCitA dmFye2FyZ30gcG9pbnRzIHRvIHRoZSBjYWxsZ3JhcGggbm9kZSBvZiB0aGUg ZGlzcGF0Y2hlciBmdW5jdGlvbiB3aG9zZQorYm9keSBtdXN0IGJlIGdlbmVy YXRlZC4KK0BlbmQgZGVmdHlwZWZuCisKIEBob29rIFRBUkdFVF9JTlZBTElE X1dJVEhJTl9ET0xPT1AKIAogVGFrZSBhbiBpbnN0cnVjdGlvbiBpbiBAdmFy e2luc259IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2YWxpZCB3aXRoaW4g YQpJbmRleDogZ2NjL2NncmFwaGJ1aWxkLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2NncmFwaGJ1aWxkLmMJKHJldmlzaW9uIDE5MDQ5MykK KysrIGdjYy9jZ3JhcGhidWlsZC5jCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2 ICszNCw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlO RzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAiaXBhLXV0aWxzLmgiCiAjaW5j bHVkZSAiZXhjZXB0LmgiCiAjaW5jbHVkZSAiaXBhLWlubGluZS5oIgorI2lu Y2x1ZGUgInRhcmdldC5oIgogCiAvKiBDb250ZXh0IG9mIHJlY29yZF9yZWZl cmVuY2UuICAqLwogc3RydWN0IHJlY29yZF9yZWZlcmVuY2VfY3R4CkBAIC0y ODgsNyArMjg5LDYgQEAgbWFya19zdG9yZSAoZ2ltcGxlIHN0bXQsIHRyZWUg dCwgdm9pZCAqZGF0YSkKICAgICAgfQogICByZXR1cm4gZmFsc2U7CiB9Ci0K IC8qIENyZWF0ZSBjZ3JhcGggZWRnZXMgZm9yIGZ1bmN0aW9uIGNhbGxzLgog ICAgQWxzbyBsb29rIGZvciBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBoYXZp bmcgYWRkcmVzc2VzIHRha2VuLiAgKi8KIApAQCAtMzE3LDggKzMxNywyMSBA QCBidWlsZF9jZ3JhcGhfZWRnZXMgKHZvaWQpCiAJCQkJCQkJIGJiKTsKIAkg ICAgICBkZWNsID0gZ2ltcGxlX2NhbGxfZm5kZWNsIChzdG10KTsKIAkgICAg ICBpZiAoZGVjbCkKLQkJY2dyYXBoX2NyZWF0ZV9lZGdlIChub2RlLCBjZ3Jh cGhfZ2V0X2NyZWF0ZV9ub2RlIChkZWNsKSwKLQkJCQkgICAgc3RtdCwgYmIt PmNvdW50LCBmcmVxKTsKKwkJeworCQkgIHN0cnVjdCBjZ3JhcGhfbm9kZSAq Y2FsbGVlID0gY2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZGVjbCk7CisJICAg ICAgICAgIC8qIElmIGEgY2FsbCB0byBhIG11bHRpdmVyc2lvbmVkIGZ1bmN0 aW9uIGRpc3BhdGNoZXIgaXMKKwkJICAgICBmb3VuZCwgZ2VuZXJhdGUgdGhl IGJvZHkgdG8gZGlzcGF0Y2ggdGhlIHJpZ2h0IGZ1bmN0aW9uCisJCSAgICAg YXQgcnVuLXRpbWUuICAqLworCQkgIGlmIChjYWxsZWUtPmRpc3BhdGNoZXJf ZnVuY3Rpb24pCisJCSAgICB7CisJCSAgICAgIHRyZWUgcmVzb2x2ZXJfZGVj bDsKKwkJICAgICAgZ2NjX2Fzc2VydCAoY2FsbGVlLT5uZXh0X2Z1bmN0aW9u X3ZlcnNpb24pOworCQkgICAgICByZXNvbHZlcl9kZWNsCisJCQkgPSB0YXJn ZXRtLmdlbmVyYXRlX3ZlcnNpb25fZGlzcGF0Y2hlcl9ib2R5IChjYWxsZWUp OworCQkgICAgICBnY2NfYXNzZXJ0IChyZXNvbHZlcl9kZWNsICE9IE5VTExf VFJFRSk7CisJCSAgICB9CisJCSAgY2dyYXBoX2NyZWF0ZV9lZGdlIChub2Rl LCBjYWxsZWUsIHN0bXQsIGJiLT5jb3VudCwgZnJlcSk7CisJICAgICAgICB9 CiAJICAgICAgZWxzZQogCQljZ3JhcGhfY3JlYXRlX2luZGlyZWN0X2VkZ2Ug KG5vZGUsIHN0bXQsCiAJCQkJCSAgICAgZ2ltcGxlX2NhbGxfZmxhZ3MgKHN0 bXQpLApJbmRleDogZ2NjL2MtZmFtaWx5L2MtY29tbW9uLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjL2MtZmFtaWx5L2MtY29tbW9uLmMJKHJl dmlzaW9uIDE5MDQ5MykKKysrIGdjYy9jLWZhbWlseS9jLWNvbW1vbi5jCSh3 b3JraW5nIGNvcHkpCkBAIC04NTAyLDkgKzg1MDIsMjIgQEAgaGFuZGxlX3Rh cmdldF9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwgdHIKICAg ICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUg aWdub3JlZCIsIG5hbWUpOwogICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7 CiAgICAgfQotICBlbHNlIGlmICghIHRhcmdldG0udGFyZ2V0X29wdGlvbi52 YWxpZF9hdHRyaWJ1dGVfcCAoKm5vZGUsIG5hbWUsIGFyZ3MsCi0JCQkJCQkg ICAgICBmbGFncykpCi0gICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgIGVs c2UKKyAgICB7CisgICAgICAvKiBXaGVuIGEgdGFyZ2V0IGF0dHJpYnV0ZSBp cyBpbnZhbGlkLCBpdCBtYXkgYWxzbyBiZSBiZWNhdXNlIHRoZQorCSB0YXJn ZXQgZm9yIHRoZSBjb21waWxhdGlvbiB1bml0IGFuZCB0aGUgYXR0cmlidXRl IG1hdGNoLiAgRm9yCisgICAgICAgICBpbnN0YW5jZSwgdGFyZ2V0IGF0dHJp YnV0ZSAieHh4IiBpcyBpbnZhbGlkIHdoZW4gLW14eHggaXMgdXNlZC4KKyAg ICAgICAgIFdoZW4gdXNlZCB3aXRoIG11bHRpdmVyc2lvbmluZywgcmVtb3Zp bmcgdGhlIGF0dHJpYnV0ZSB3aWxsIGxlYWQKKyAgICAgICAgIHRvIGR1cGxp Y2F0ZSBkZWZpbml0aW9ucyBpZiBhIGRlZmF1bHQgdmVyc2lvbiBpcyBwcm92 aWRlZC4KKwkgU28sIGdlbmVyYXRlIGEgd2FybmluZyBoZXJlIGFuZCByZW1v dmUgdGhlIGF0dHJpYnV0ZS4gICovCisgICAgICBpZiAoIXRhcmdldG0udGFy Z2V0X29wdGlvbi52YWxpZF9hdHRyaWJ1dGVfcCAoKm5vZGUsIG5hbWUsIGFy Z3MsIGZsYWdzKSkKKwl7CisJICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMs CisJCSAgICJJbnZhbGlkIHRhcmdldCBhdHRyaWJ1dGUgaW4gZnVuY3Rpb24g JXFFLCBpZ25vcmVkLiIsCisJCSAgICpub2RlKTsKKwkgICpub19hZGRfYXR0 cnMgPSB0cnVlOworCX0KKyAgICB9CiAKICAgcmV0dXJuIE5VTExfVFJFRTsK IH0KSW5kZXg6IGdjYy90YXJnZXQuZGVmCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy90YXJnZXQuZGVmCShyZXZpc2lvbiAxOTA0OTMpCisrKyBn Y2MvdGFyZ2V0LmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTI5OCw2ICsxMjk4 LDM5IEBAIERFRkhPT0sKICB0cmVlLCAodHJlZSBmbmRlY2wsIGludCBuX2Fy Z3MsIHRyZWUgKmFyZ3AsIGJvb2wgaWdub3JlKSwKICBob29rX3RyZWVfdHJl ZV9pbnRfdHJlZXBfYm9vbF9udWxsKQogCisvKiBUYXJnZXQgaG9vayB0byBj b21wYXJlIHRoZSBwcmlvcml0eSBvZiB0YXJnZXQgZmVhdHVyZXMgaW4gZnVu Y3Rpb24gREVDTDEKKyAgIGFuZCBERUNMMi4gIEl0IHJldHVybnMgcG9zaXRp dmUgdmFsdWUgaWYgREVDTDEgaXMgaGlnaGVyIHByaW9yaXR5LAorICAgbmVn YXRpdmUgdmFsdWUgaWYgREVDTDIgaXMgaGlnaGVyIHByaW9yaXR5IGFuZCAw IGlmIHRoZXkgYXJlIHRoZQorICAgc2FtZS4gICovCitERUZIT09LCisoY29t cGFyZV92ZXJzaW9uX3ByaW9yaXR5LAorICIiLAorIGludCwgKHRyZWUgZGVj bDEsIHRyZWUgZGVjbDIpLCBOVUxMKQorCisvKiBUYXJnZXQgaG9vayB0byBn ZXQgdGhlIG5ldyBhc3NlbWJsZXIgbmFtZSBvZiBERUNMIHdoaWNoIGlzIGEg ZnVuY3Rpb24KKyAgIHZlcnNpb24uICAqLworCitERUZIT09LCisoc2V0X3Zl cnNpb25fYXNzZW1ibGVyX25hbWUsCisgIiIsCisgdm9pZCwgKHRyZWUgZGVj bCksIE5VTEwpCisKKy8qIFRhcmdldCBob29rIHRvIGdlbmVyYXRlIHRoZSBk aXNwYXRjaGVyIGJvZHkgZm9yIGEgZnVuY3Rpb24gdmVyc2lvbgorICAgZGlz cGF0Y2hlciBBUkcsIHdoaWNoIGlzIGEgY2dyYXBoX25vZGUgcG9pbnRlci4g ICovCisKK0RFRkhPT0sKKyhnZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJf Ym9keSwKKyAiIiwKKyB0cmVlLCAodm9pZCAqYXJnKSwgTlVMTCkgCisKKy8q IFRhcmdldCBob29rIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdmVyc2lvbiBk aXNwYXRjaGVyIERFQ0wgZm9yIHRoZSBsaXN0CisgICBvZiBmdW5jdGlvbiB2 ZXJzaW9ucyBpbiBhcmdsaXN0LCB3aGljaCBpcyBhIHZlY3RvciBvZiBkZWNs cy4gICovCisKK0RFRkhPT0sKKyhnZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlz cGF0Y2hlciwKKyAiIiwKKyB0cmVlLCAodm9pZCAqYXJnbGlzdCksIE5VTEwp CisKIC8qIFJldHVybnMgYSBjb2RlIGZvciBhIHRhcmdldC1zcGVjaWZpYyBi dWlsdGluIHRoYXQgaW1wbGVtZW50cwogICAgcmVjaXByb2NhbCBvZiB0aGUg ZnVuY3Rpb24sIG9yIE5VTExfVFJFRSBpZiBub3QgYXZhaWxhYmxlLiAgKi8K IERFRkhPT0sKQEAgLTI3MDUsNiArMjczOCwxNCBAQCBERUZIT09LCiAgdm9p ZCwgKHZvaWQpLAogIGhvb2tfdm9pZF92b2lkKQogCisvKiBSZXR1cm5zIHRy dWUgaWYgREVDTDEgYW5kIERFQ0wyIGFyZSB2ZXJzaW9ucyBvZiB0aGUgc2Ft ZSBmdW5jdGlvbi4gICovCisKK0RFRkhPT0sKKyhmdW5jdGlvbl92ZXJzaW9u cywKKyAiIiwKKyBib29sLCAodHJlZSBkZWNsMSwgdHJlZSBkZWNsMiksCisg aG9va19ib29sX3RyZWVfdHJlZV9mYWxzZSkKKwogLyogRnVuY3Rpb24gdG8g ZGV0ZXJtaW5lIGlmIG9uZSBmdW5jdGlvbiBjYW4gaW5saW5lIGFub3RoZXIg ZnVuY3Rpb24uICAqLwogI3VuZGVmIEhPT0tfUFJFRklYCiAjZGVmaW5lIEhP T0tfUFJFRklYICJUQVJHRVRfIgpJbmRleDogZ2NjL2NncmFwaC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jZ3JhcGguYwkocmV2aXNpb24g MTkwNDkzKQorKysgZ2NjL2NncmFwaC5jCSh3b3JraW5nIGNvcHkpCkBAIC0x MjgxLDYgKzEyODEsMTQgQEAgY2dyYXBoX21hcmtfYWRkcmVzc190YWtlbl9u b2RlIChzdHJ1Y3QgY2dyYXBoX25vZGUKICAgbm9kZS0+c3ltYm9sLmFkZHJl c3NfdGFrZW4gPSAxOwogICBub2RlID0gY2dyYXBoX2Z1bmN0aW9uX29yX3Ro dW5rX25vZGUgKG5vZGUsIE5VTEwpOwogICBub2RlLT5zeW1ib2wuYWRkcmVz c190YWtlbiA9IDE7CisgIC8qIElmIHRoZSBhZGRyZXNzIG9mIGEgbXVsdGl2 ZXJzaW9uZWQgZnVuY3Rpb24gZGlzcGF0Y2hlciBpcyB0YWtlbiwKKyAgICAg Z2VuZXJhdGUgdGhlIGJvZHkgdG8gZGlzcGF0Y2ggdGhlIHJpZ2h0IGZ1bmN0 aW9uIGF0IHJ1bi10aW1lLiAgVGhpcworICAgICBpcyBuZWVkZWQgYXMgdGhl IGFkZHJlc3MgY2FuIGJlIHVzZWQgdG8gZG8gYW4gaW5kaXJlY3QgY2FsbC4g ICovCisgIGlmIChub2RlLT5kaXNwYXRjaGVyX2Z1bmN0aW9uKQorICAgIHsK KyAgICAgIGdjY19hc3NlcnQgKG5vZGUtPm5leHRfZnVuY3Rpb25fdmVyc2lv bik7CisgICAgICB0YXJnZXRtLmdlbmVyYXRlX3ZlcnNpb25fZGlzcGF0Y2hl cl9ib2R5IChub2RlKTsKKyAgICB9CiB9CiAKIC8qIFJldHVybiBsb2NhbCBp bmZvIGZvciB0aGUgY29tcGlsZWQgZnVuY3Rpb24uICAqLwpJbmRleDogZ2Nj L2NncmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jZ3Jh cGguaAkocmV2aXNpb24gMTkwNDkzKQorKysgZ2NjL2NncmFwaC5oCSh3b3Jr aW5nIGNvcHkpCkBAIC0yMjAsNiArMjIwLDI2IEBAIHN0cnVjdCBHVFkoKCkp IGNncmFwaF9ub2RlIHsKICAgc3RydWN0IGNncmFwaF9ub2RlICpwcmV2X3Np YmxpbmdfY2xvbmU7CiAgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2xvbmVzOwog ICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmNsb25lX29mOworCisgIC8qIFRPRE86 IFB1dCB2ZXJzaW9uX2Rpc3BhdGNoZXJfZGVjbCwgcHJldl9mdW5jdGlvbl92 ZXJzaW9uLAorICAgICBuZXh0X2Z1bmN0aW9uX3ZlcnNpb24gaW50byBhIHN0 cnVjdCBmb3IgcmVhZGFiaWxpdHkuCisKKyAgICAgSWYgdGhpcyBub2RlIGNv cnJlc3BvbmRzIHRvIGEgZnVuY3Rpb24gdmVyc2lvbiwgdGhpcyBwb2ludHMK KyAgICAgdG8gdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gZGVjbCB3aGljaCBp cyB0aGUgZnVuY3Rpb24gdGhhdCBtdXN0CisgICAgIGJlIGNhbGxlZCB0byBl eGVjdXRlIHRoZSByaWdodCBmdW5jdGlvbiB2ZXJzaW9uIGF0IHJ1bi10aW1l LgorCisgICAgIElmIHRoaXMgbm9kZSBpcyBhIGRpc3BhdGNoZXIgZm9yIGZ1 bmN0aW9uIHZlcnNpb25zLCB0aGlzIHBvaW50cworICAgICB0byByZXNvbHZl ciBmdW5jdGlvbiwgd2hpY2ggaG9sZHMgIHRoZSBmdW5jdGlvbiBib2R5IGZv ciB0aGUKKyAgICAgZGlzcGF0Y2hlci4gICovCisgIHRyZWUgdmVyc2lvbl9k aXNwYXRjaGVyX2RlY2w7CisKKyAgLyogQ2hhaW5zIGFsbCB0aGUgc2VtYW50 aWNhbGx5IGlkZW50aWNhbCBmdW5jdGlvbiB2ZXJzaW9ucy4gIFRoZQorICAg ICBmaXJzdCBmdW5jdGlvbiBpbiB0aGlzIGNoYWluIGlzIHRoZSBkZWZhdWx0 IGZ1bmN0aW9uLiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICpwcmV2X2Z1 bmN0aW9uX3ZlcnNpb247CisgIC8qIElmIHRoaXMgbm9kZSBpcyBhIGRpc3Bh dGNoZXIgZm9yIGZ1bmN0aW9uIHZlcnNpb25zLCB0aGlzIGFsc28gcG9pbnRz CisgICAgIHRvIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIHZlcnNpb24uICAqLwor ICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5leHRfZnVuY3Rpb25fdmVyc2lvbjsK KwogICAvKiBGb3IgZnVuY3Rpb25zIHdpdGggbWFueSBjYWxscyBzaXRlcyBp dCBob2xkcyBtYXAgZnJvbSBjYWxsIGV4cHJlc3Npb24KICAgICAgdG8gdGhl IGVkZ2UgdG8gc3BlZWQgdXAgY2dyYXBoX2VkZ2UgZnVuY3Rpb24uICAqLwog ICBodGFiX3QgR1RZKChwYXJhbV9pcyAoc3RydWN0IGNncmFwaF9lZGdlKSkp IGNhbGxfc2l0ZV9oYXNoOwpAQCAtMjcxLDYgKzI5MSw3IEBAIHN0cnVjdCBH VFkoKCkpIGNncmFwaF9ub2RlIHsKICAgLyogPz8gV2Ugc2hvdWxkIGJlIGFi bGUgdG8gcmVtb3ZlIHRoaXMuICBXZSBoYXZlIGVub3VnaCBiaXRzIGluCiAg ICAgIGNncmFwaCB0byBjYWxjdWxhdGUgaXQuICAqLwogICB1bnNpZ25lZCB0 bV9jbG9uZSA6IDE7CisgIHVuc2lnbmVkIGRpc3BhdGNoZXJfZnVuY3Rpb24g OiAxOwogfTsKIAogREVGX1ZFQ19QKHN5bXRhYl9ub2RlKTsKQEAgLTY0OCw2 ICs2NjksNyBAQCB2b2lkIGNncmFwaF9yZWJ1aWxkX3JlZmVyZW5jZXMgKHZv aWQpOwogaW50IGNvbXB1dGVfY2FsbF9zdG10X2JiX2ZyZXF1ZW5jeSAodHJl ZSwgYmFzaWNfYmxvY2sgYmIpOwogdm9pZCByZWNvcmRfcmVmZXJlbmNlc19p bl9pbml0aWFsaXplciAodHJlZSwgYm9vbCk7CiAKKwogLyogSW4gaXBhLmMg ICovCiBib29sIHN5bXRhYl9yZW1vdmVfdW5yZWFjaGFibGVfbm9kZXMgKGJv b2wsIEZJTEUgKik7CiBjZ3JhcGhfbm9kZV9zZXQgY2dyYXBoX25vZGVfc2V0 X25ldyAodm9pZCk7CkluZGV4OiBnY2MvdHJlZS5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy90cmVlLmgJKHJldmlzaW9uIDE5MDQ5MykKKysr IGdjYy90cmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0MzYsNiArMzQzNiwx MiBAQCBleHRlcm4gVkVDKHRyZWUsIGdjKSAqKmRlY2xfZGVidWdfYXJnc19p bnNlcnQgKHRyZQogI2RlZmluZSBERUNMX0ZVTkNUSU9OX1NQRUNJRklDX09Q VElNSVpBVElPTihOT0RFKSBcCiAgICAoRlVOQ1RJT05fREVDTF9DSEVDSyAo Tk9ERSktPmZ1bmN0aW9uX2RlY2wuZnVuY3Rpb25fc3BlY2lmaWNfb3B0aW1p emF0aW9uKQogCisvKiBJbiBGVU5DVElPTl9ERUNMLCB0aGlzIGlzIHNldCBp ZiB0aGlzIGZ1bmN0aW9uIGhhcyBvdGhlciB2ZXJzaW9ucyBnZW5lcmF0ZWQK KyAgIHVzaW5nICJ0YXJnZXQiIGF0dHJpYnV0ZXMuICBUaGUgZGVmYXVsdCB2 ZXJzaW9uIGlzIHRoZSBvbmUgd2hpY2ggZG9lcyBub3QKKyAgIGhhdmUgYW55 ICJ0YXJnZXQiIGF0dHJpYnV0ZSBzZXQuICovCisjZGVmaW5lIERFQ0xfRlVO Q1RJT05fVkVSU0lPTkVEKE5PREUpXAorICAgKEZVTkNUSU9OX0RFQ0xfQ0hF Q0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLnZlcnNpb25lZF9mdW5jdGlvbikK KwogLyogRlVOQ1RJT05fREVDTCBpbmhlcml0cyBmcm9tIERFQ0xfTk9OX0NP TU1PTiBiZWNhdXNlIG9mIHRoZSB1c2Ugb2YgdGhlCiAgICBhcmd1bWVudHMv cmVzdWx0L3NhdmVkX3RyZWUgZmllbGRzIGJ5IGZyb250IGVuZHMuICAgSXQg d2FzIGVpdGhlciBpbmhlcml0CiAgICBGVU5DVElPTl9ERUNMIGZyb20gbm9u X2NvbW1vbiwgb3IgaW5oZXJpdCBub25fY29tbW9uIGZyb20gRlVOQ1RJT05f REVDTCwKQEAgLTM0ODAsOCArMzQ4Niw4IEBAIHN0cnVjdCBHVFkoKCkpIHRy ZWVfZnVuY3Rpb25fZGVjbCB7CiAgIHVuc2lnbmVkIGxvb3BpbmdfY29uc3Rf b3JfcHVyZV9mbGFnIDogMTsKICAgdW5zaWduZWQgaGFzX2RlYnVnX2FyZ3Nf ZmxhZyA6IDE7CiAgIHVuc2lnbmVkIHRtX2Nsb25lX2ZsYWcgOiAxOwotCi0g IC8qIDEgYml0IGxlZnQgKi8KKyAgdW5zaWduZWQgdmVyc2lvbmVkX2Z1bmN0 aW9uIDogMTsKKyAgLyogTm8gYml0cyBsZWZ0LiAgKi8KIH07CiAKIC8qIFRo ZSBzb3VyY2UgbGFuZ3VhZ2Ugb2YgdGhlIHRyYW5zbGF0aW9uLXVuaXQuICAq LwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXYyLkMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXYyLkMJ KHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjIuQwko cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8qIFRlc3QgY2FzZSB0 byBjaGVjayBpZiBNdWx0aXZlcnNpb25pbmcgY2hvb3NlcyB0aGUgY29ycmVj dAorICAgZGlzcGF0Y2hpbmcgb3JkZXIgd2hlbiB2ZXJzaW9ucyBhcmUgZm9y IHZhcmlvdXMgSVNBcy4gICovCisvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBp Pzg2LSotKiB4ODZfNjQtKi0qIH0gfSAqLworLyogeyBkZy1yZXF1aXJlLWlm dW5jICIiIH0gICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLXNzZSAt bW5vLW1teCAtbW5vLXBvcGNudCAtbW5vLWF2eCIgfSAqLworCisjaW5jbHVk ZSA8YXNzZXJ0Lmg+CisKKy8qIERlZmF1bHQgdmVyc2lvbi4gICovCitpbnQg Zm9vICgpOworLyogVGhlIGRpc3BhdGNoIGNoZWNrcyBzaG91bGQgYmUgaW4g dGhlIGV4YWN0IHJldmVyc2Ugb3JkZXIgb2YgdGhlCisgICBkZWNsYXJhdGlv bnMgYmVsb3cuICAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFy Z2V0ICgibW14IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRh cmdldCAoInNzZSIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQgKCJzc2UyIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAo KHRhcmdldCAoInNzZTMiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0ICgic3NzZTMiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0 ZV9fICgodGFyZ2V0ICgic3NlNC4xIikpKTsKK2ludCBmb28gKCkgX19hdHRy aWJ1dGVfXyAoKHRhcmdldCAoInNzZTQuMiIpKSk7CitpbnQgZm9vICgpIF9f YXR0cmlidXRlX18gKCh0YXJnZXQgKCJwb3BjbnQiKSkpOworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgiYXZ4IikpKTsKK2ludCBmb28g KCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoImF2eDIiKSkpOworCitpbnQg bWFpbiAoKQoreworCisgIGludCB2YWwgPSBmb28gKCk7CisKKyAgaWYgKF9f YnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJhdngyIikpCisgICAgYXNzZXJ0ICh2 YWwgPT0gMSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMg KCJhdngiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAyKTsKKyAgZWxzZSBpZiAo X19idWlsdGluX2NwdV9zdXBwb3J0cyAoInBvcGNudCIpKQorICAgIGFzc2Vy dCAodmFsID09IDMpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBv cnRzICgic3NlNC4yIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gNCk7CisgIGVs c2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc2U0LjEiKSkKKyAg ICBhc3NlcnQgKHZhbCA9PSA1KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2Nw dV9zdXBwb3J0cyAoInNzc2UzIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gNik7 CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc2UzIikp CisgICAgYXNzZXJ0ICh2YWwgPT0gNyk7CisgIGVsc2UgaWYgKF9fYnVpbHRp bl9jcHVfc3VwcG9ydHMgKCJzc2UyIikpCisgICAgYXNzZXJ0ICh2YWwgPT0g OCk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc2Ui KSkKKyAgICBhc3NlcnQgKHZhbCA9PSA5KTsKKyAgZWxzZSBpZiAoX19idWls dGluX2NwdV9zdXBwb3J0cyAoIm1teCIpKQorICAgIGFzc2VydCAodmFsID09 IDEwKTsKKyAgZWxzZQorICAgIGFzc2VydCAodmFsID09IDApOworCisgIHJl dHVybiAwOworfQorCitpbnQKK2ZvbyAoKQoreworICByZXR1cm4gMDsKK30K KworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoIm1teCIpKSkKK2ZvbyAo KQoreworICByZXR1cm4gMTA7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgo dGFyZ2V0KCJzc2UiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDk7Cit9CisK K2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2UyIikpKQorZm9vICgp Cit7CisgIHJldHVybiA4OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRh cmdldCgic3NlMyIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gNzsKK30KKwor aW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzc2UzIikpKQorZm9vICgp Cit7CisgIHJldHVybiA2OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRh cmdldCgic3NlNC4xIikpKQorZm9vICgpCit7CisgIHJldHVybiA1OworfQor CitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3NlNC4yIikpKQorZm9v ICgpCit7CisgIHJldHVybiA0OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAo KHRhcmdldCgicG9wY250IikpKQorZm9vICgpCit7CisgIHJldHVybiAzOwor fQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXZ4IikpKQorZm9v ICgpCit7CisgIHJldHVybiAyOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAo KHRhcmdldCgiYXZ4MiIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTsKK30K SW5kZXg6IGdjYy90ZXN0c3VpdGUvZysrLmRnL212NC5DCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL212NC5DCShy ZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXY0LkMJKHJl dmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKy8qIFRlc3QgY2FzZSB0byBj aGVjayBpZiB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGFuIGVycm9yIG1lc3Nh Z2UKKyAgIHdoZW4gdGhlIGRlZmF1bHQgdmVyc2lvbiBvZiBhIG11bHRpdmVy c2lvbmVkIGZ1bmN0aW9uIGlzIGFic2VudAorICAgYW5kIGl0cyBwb2ludGVy IGlzIHRha2VuLiAgKi8KKworLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0 IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PMiAtbW5vLXNzZSAtbW5vLXBvcGNudCIgfSAqLworCitpbnQgX19hdHRy aWJ1dGVfXyAoKHRhcmdldCAoInNzZSIpKSkKK2ZvbyAoKQoreworICByZXR1 cm4gMTsKK30KK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgicG9wY250 IikpKQorZm9vICgpCit7CisgIHJldHVybiAwOworfQorCitpbnQgbWFpbiAo KQoreworICBpbnQgKCpwKSgpID0gJmZvbzsgLyogeyBkZy1lcnJvciAiUG9p bnRlciB0byBhIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uIHdpdGhvdXQgYSBk ZWZhdWx0IGlzIG5vdCBhbGxvd2VkIiB7fSB9ICovCisgIHJldHVybiAoKnAp KCk7Cit9CkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjEuQwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9t djEuQwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL212 MS5DCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyogVGVzdCBj YXNlIHRvIGNoZWNrIGlmIE11bHRpdmVyc2lvbmluZyB3b3Jrcy4gICovCisv KiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0g fSAqLworLyogeyBkZy1yZXF1aXJlLWlmdW5jICIiIH0gICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiAtZlBJQyAtbW5vLWF2eCIgfSAqLworCisjaW5jbHVk ZSA8YXNzZXJ0Lmg+CisKKy8qIERlZmF1bHQgdmVyc2lvbi4gICovCitpbnQg Zm9vICgpOworLyogVGhlIG90aGVyIHZlcnNpb25zIG9mIGZvby4gIE1peCB1 cCB0aGUgb3JkZXJpbmcgYW5kIAorICAgY2hlY2sgaWYgdGhlIGRpc3BhdGNo aW5nIGRvZXMgaXQgaW4gdGhlIG9yZGVyIG9mIHByaW9yaXR5LiAqLworLyog Q2hlY2sgY29tYmluYXRpb24gb2YgdGFyZ2V0IGF0dHJpYnV0ZXMuICAqLwor aW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmVp Nyxwb3BjbnQiKSkpOworLyogVGhlIHRhcmdldCBvcGVyYW5kcyBpbiB0aGlz IGRlY2xhcmF0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBhcmUgcmUtb3JkZXJl ZC4KKyAgIFRoaXMgc2hvdWxkIHN0aWxsIHdvcmsuICAqLworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc3NlMyxhdngyIikpKTsKKwor LyogQ2hlY2sgZm9yIGFsbCB0YXJnZXQgYXR0cmlidXRlcyBmb3Igd2hpY2gg ZGlzcGF0Y2hlcnMgYXJlIGF2YWlsYWJsZS4gICovCisvKiBDaGVjayBhcmNo PSAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9 Y29yZTIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQo ImFyY2g9Y29yZWk3IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygo dGFyZ2V0KCJhcmNoPWF0b20iKSkpOworLyogQ2hlY2sgSVNBcyAgKi8KK2lu dCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhdngiKSkpOworaW50 IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUyLHNz ZTQuMiIpKSk7CisvKiBDaGVjayBtb3JlIGFyY2g9LiAgKi8KK2ludCBmb28g KCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWFtZGZhbTEwIikpKTsK K2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWJkdmVy MSIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgiYXJj aD1iZHZlcjIiKSkpOworCitpbnQgKCpwKSgpID0gJmZvbzsKK2ludCBtYWlu ICgpCit7CisgIGludCB2YWwgPSBmb28gKCk7CisgIGFzc2VydCAodmFsID09 ICAoKnApKCkpOworCisgIC8qIENoZWNrIGluIHRoZSBleGFjdCBzYW1lIG9y ZGVyIGluIHdoaWNoIHRoZSBkaXNwYXRjaGluZworICAgICBpcyBleHBlY3Rl ZCB0byBoYXBwZW4uICAqLworICBpZiAoX19idWlsdGluX2NwdV9pcyAoImJk dmVyMSIpKQorICAgIGFzc2VydCAodmFsID09IDEpOworICBlbHNlIGlmIChf X2J1aWx0aW5fY3B1X2lzICgiYmR2ZXIyIikpCisgICAgYXNzZXJ0ICh2YWwg PT0gMik7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJh dngyIikKKwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NzZTMi KSkKKyAgICBhc3NlcnQgKHZhbCA9PSAzKTsKKyAgZWxzZSBpZiAoX19idWls dGluX2NwdV9zdXBwb3J0cyAoImF2eCIpKQorICAgIGFzc2VydCAodmFsID09 IDQpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X2lzICgiY29yZWk3IikK KwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgicG9wY250IikpCisg ICAgYXNzZXJ0ICh2YWwgPT0gNSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfaXMgKCJjb3JlaTciKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA2KTsKKyAg ZWxzZSBpZiAoX19idWlsdGluX2NwdV9pcyAoImFtZGZhbTEwaCIpKQorICAg IGFzc2VydCAodmFsID09IDcpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1 X2lzICgiY29yZTIiKQorCSAgICYmIF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMg KCJzc2U0LjIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA4KTsKKyAgZWxzZSBp ZiAoX19idWlsdGluX2NwdV9pcyAoImNvcmUyIikpCisgICAgYXNzZXJ0ICh2 YWwgPT0gOSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJhdG9t IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMTApOworICBlbHNlCisgICAgYXNz ZXJ0ICh2YWwgPT0gMCk7CisgIAorICByZXR1cm4gMDsKK30KKworaW50IGZv byAoKQoreworICByZXR1cm4gMDsKK30KKworaW50IF9fYXR0cmlidXRlX18g KCh0YXJnZXQoImFyY2g9Y29yZWk3LHBvcGNudCIpKSkKK2ZvbyAoKQorewor ICByZXR1cm4gNTsKK30KK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJh dngyLHNzc2UzIikpKQorZm9vICgpCit7CisgIHJldHVybiAzOworfQorCitp bnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1jb3JlMiIpKSkKK2Zv byAoKQoreworICByZXR1cm4gOTsKK30KKworaW50IF9fYXR0cmlidXRlX18g KCh0YXJnZXQoImFyY2g9Y29yZWk3IikpKQorZm9vICgpCit7CisgIHJldHVy biA2OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1h dG9tIikpKQorZm9vICgpCit7CisgIHJldHVybiAxMDsKK30KKworaW50IF9f YXR0cmlidXRlX18gKCh0YXJnZXQoImF2eCIpKSkKK2ZvbyAoKQoreworICBy ZXR1cm4gNDsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFy Y2g9Y29yZTIsc3NlNC4yIikpKQorZm9vICgpCit7CisgIHJldHVybiA4Owor fQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1hbWRmYW0x MCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gNzsKK30KKworaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoImFyY2g9YmR2ZXIxIikpKQorZm9vICgpCit7 CisgIHJldHVybiAxOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCgiYXJjaD1iZHZlcjIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDI7Cit9 CkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjMuQwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjMuQwko cmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL212My5DCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKiBUZXN0IGNhc2UgdG8g Y2hlY2sgaWYgYSBjYWxsIHRvIGEgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24K KyAgIGlzIHJlcGxhY2VkIHdpdGggYSBkaXJlY3QgY2FsbCB0byB0aGUgcGFy dGljdWxhciB2ZXJzaW9uIHdoZW4KKyAgIHRoZSBtb3N0IHNwZWNpYWxpemVk IHZlcnNpb24ncyB0YXJnZXQgYXR0cmlidXRlcyBtYXRjaCB0aGUKKyAgIGNh bGxlci4gIAorICAKKyAgIEluIHRoaXMgcHJvZ3JhbSwgZm9vIGlzIG11bHRp dmVyc2lvbmVkIGJ1dCB0aGVyZSBpcyBubyBkZWZhdWx0CisgICBmdW5jdGlv bi4gIFRoaXMgaXMgYW4gZXJyb3IgaWYgdGhlIGNhbGwgaGFzIHRvIGdvIHRo cm91Z2ggYQorICAgZGlzcGF0Y2hlci4gIEhvd2V2ZXIsIHRoZSBjYWxsIHRv IGZvbyBpbiBiYXIgY2FuIGJlIHJlcGxhY2VkCisgICB3aXRoIGEgZGlyZWN0 IGNhbGwgdG8gdGhlIHBvcGNudCB2ZXJzaW9uIG9mIGZvby4gIEhlbmNlLCB0 aGlzCisgICB0ZXN0IHNob3VsZCBwYXNzLiAgKi8KKworLyogeyBkZy1kbyBy dW4geyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLU8yIC1tbm8tc3NlIC1tbm8tcG9wY250IiB9ICovCisK KworLyogRGVmYXVsdCB2ZXJzaW9uLiAgKi8KK2ludCBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0ICgic3NlIikpKQorZm9vICgpCit7CisgIHJldHVybiAxOwor fQoraW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJwb3BjbnQiKSkpCitm b28gKCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0ICgicG9wY250IikpKQorYmFyICgpCit7CisgIHJldHVybiBm b28gKCk7Cit9CisKK2ludCBtYWluICgpCit7CisgIHJldHVybiBiYXIgKCk7 Cit9CkluZGV4OiBnY2MvY3AvY2xhc3MuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvY3AvY2xhc3MuYwkocmV2aXNpb24gMTkwNDkzKQorKysg Z2NjL2NwL2NsYXNzLmMJKHdvcmtpbmcgY29weSkKQEAgLTEwOTEsNyArMTA5 MSwyMCBAQCBhZGRfbWV0aG9kICh0cmVlIHR5cGUsIHRyZWUgbWV0aG9kLCB0 cmVlIHVzaW5nX2RlYwogCSAgICAgIHx8IHNhbWVfdHlwZV9wIChUUkVFX1RZ UEUgKGZuX3R5cGUpLAogCQkJICAgICAgVFJFRV9UWVBFIChtZXRob2RfdHlw ZSkpKSkKIAl7Ci0JICBpZiAodXNpbmdfZGVjbCkKKwkgIC8qIEZvciBmdW5j dGlvbiB2ZXJzaW9ucywgdGhlaXIgcGFybXMgYW5kIHR5cGVzIG1hdGNoCisJ ICAgICBidXQgdGhleSBhcmUgbm90IGR1cGxpY2F0ZXMuICBSZWNvcmQgZnVu Y3Rpb24gdmVyc2lvbnMKKwkgICAgIGFzIGFuZCB3aGVuIHRoZXkgYXJlIGZv dW5kLiAgKi8KKwkgIGlmIChUUkVFX0NPREUgKGZuKSA9PSBGVU5DVElPTl9E RUNMCisJICAgICAgJiYgVFJFRV9DT0RFIChtZXRob2QpID09IEZVTkNUSU9O X0RFQ0wKKwkgICAgICAmJiAoREVDTF9GVU5DVElPTl9TUEVDSUZJQ19UQVJH RVQgKGZuKQorCQkgIHx8IERFQ0xfRlVOQ1RJT05fU1BFQ0lGSUNfVEFSR0VU IChtZXRob2QpKQorCSAgICAgICYmIHRhcmdldG0udGFyZ2V0X29wdGlvbi5m dW5jdGlvbl92ZXJzaW9ucyAoZm4sIG1ldGhvZCkpCisgCSAgICB7CisJICAg ICAgdGFyZ2V0bS5zZXRfdmVyc2lvbl9hc3NlbWJsZXJfbmFtZSAoZm4pOwor CSAgICAgIHRhcmdldG0uc2V0X3ZlcnNpb25fYXNzZW1ibGVyX25hbWUgKG1l dGhvZCk7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYg KHVzaW5nX2RlY2wpCiAJICAgIHsKIAkgICAgICBpZiAoREVDTF9DT05URVhU IChmbikgPT0gdHlwZSkKIAkJLyogRGVmZXIgdG8gdGhlIGxvY2FsIGZ1bmN0 aW9uLiAgKi8KQEAgLTY5MjIsNiArNjkzNSw3IEBAIHJlc29sdmVfYWRkcmVz c19vZl9vdmVybG9hZGVkX2Z1bmN0aW9uICh0cmVlIHRhcmdlCiAgIHRyZWUg bWF0Y2hlcyA9IE5VTExfVFJFRTsKICAgdHJlZSBmbjsKICAgdHJlZSB0YXJn ZXRfZm5fdHlwZTsKKyAgVkVDICh0cmVlLCBoZWFwKSAqZm5fdmVyX3ZlYyA9 IE5VTEw7CiAKICAgLyogQnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUsIHdlIHNo b3VsZCBiZSBzZWVpbmcgb25seSByZWFsCiAgICAgIHBvaW50ZXItdG8tbWVt YmVyIHR5cGVzLCBub3QgdGhlIGludGVybmFsIFBPSU5URVJfVFlQRSB0bwpA QCAtNjk4Niw5ICs3MDAwLDE5IEBAIHJlc29sdmVfYWRkcmVzc19vZl9vdmVy bG9hZGVkX2Z1bmN0aW9uICh0cmVlIHRhcmdlCiAJICBpZiAoREVDTF9BTlRJ Q0lQQVRFRCAoZm4pKQogCSAgICBjb250aW51ZTsKIAotCSAgLyogU2VlIGlm IHRoZXJlJ3MgYSBtYXRjaC4gICovCisJICAvKiBTZWUgaWYgdGhlcmUncyBh IG1hdGNoLiAgIEZvciBmdW5jdGlvbnMgdGhhdCBhcmUgbXVsdGktdmVyc2lv bmVkLAorCSAgICAgYWxsIHRoZSB2ZXJzaW9ucyBtYXRjaC4gICovCiAJICBp ZiAoc2FtZV90eXBlX3AgKHRhcmdldF9mbl90eXBlLCBzdGF0aWNfZm5fdHlw ZSAoZm4pKSkKLQkgICAgbWF0Y2hlcyA9IHRyZWVfY29ucyAoZm4sIE5VTExf VFJFRSwgbWF0Y2hlcyk7CisJICAgIHsKKwkgICAgICBtYXRjaGVzID0gdHJl ZV9jb25zIChmbiwgTlVMTF9UUkVFLCBtYXRjaGVzKTsKKwkgICAgICAvKklm IHZlcnNpb25lZCwgcHVzaCBhbGwgcG9zc2libGUgdmVyc2lvbnMgaW50byBh IHZlY3Rvci4gICovCisJICAgICAgaWYgKERFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEIChmbikpCisJCXsKKwkJICBpZiAoZm5fdmVyX3ZlYyA9PSBOVUxMKQor CQkgICBmbl92ZXJfdmVjID0gVkVDX2FsbG9jICh0cmVlLCBoZWFwLCAyKTsK KwkJICBWRUNfc2FmZV9wdXNoICh0cmVlLCBoZWFwLCBmbl92ZXJfdmVjLCBm bik7IAorCQl9CisJICAgIH0KIAl9CiAgICAgfQogCkBAIC03MDgwLDEzICs3 MTA0LDI2IEBAIHJlc29sdmVfYWRkcmVzc19vZl9vdmVybG9hZGVkX2Z1bmN0 aW9uICh0cmVlIHRhcmdlCiAgICAgewogICAgICAgLyogVGhlcmUgd2VyZSB0 b28gbWFueSBtYXRjaGVzLiAgRmlyc3QgY2hlY2sgaWYgdGhleSdyZSBhbGwK IAkgdGhlIHNhbWUgZnVuY3Rpb24uICAqLwotICAgICAgdHJlZSBtYXRjaDsK KyAgICAgIHRyZWUgbWF0Y2ggPSBOVUxMX1RSRUU7CiAKICAgICAgIGZuID0g VFJFRV9QVVJQT1NFIChtYXRjaGVzKTsKLSAgICAgIGZvciAobWF0Y2ggPSBU UkVFX0NIQUlOIChtYXRjaGVzKTsgbWF0Y2g7IG1hdGNoID0gVFJFRV9DSEFJ TiAobWF0Y2gpKQotCWlmICghZGVjbHNfbWF0Y2ggKGZuLCBUUkVFX1BVUlBP U0UgKG1hdGNoKSkpCi0JICBicmVhazsKIAorICAgICAgLyogRm9yIG11bHRp LXZlcnNpb25lZCBmdW5jdGlvbnMsIG1vcmUgdGhhbiBvbmUgbWF0Y2ggaXMg anVzdCBmaW5lLgorCSBDYWxsIGRlY2xzX21hdGNoIHRvIG1ha2Ugc3VyZSB0 aGV5IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSB0aGV5IGFyZQorCSB2ZXJzaW9u ZWQuICAqLworICAgICAgaWYgKERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChm bikpCisJeworICAgICAgICAgIGZvciAobWF0Y2ggPSBUUkVFX0NIQUlOICht YXRjaGVzKTsgbWF0Y2g7IG1hdGNoID0gVFJFRV9DSEFJTiAobWF0Y2gpKQor ICAJICAgIGlmIChkZWNsc19tYXRjaCAoZm4sIFRSRUVfUFVSUE9TRSAobWF0 Y2gpKSkKKwkgICAgICBicmVhazsKKwl9CisgICAgICBlbHNlCisJeworICAg ICAgICAgIGZvciAobWF0Y2ggPSBUUkVFX0NIQUlOIChtYXRjaGVzKTsgbWF0 Y2g7IG1hdGNoID0gVFJFRV9DSEFJTiAobWF0Y2gpKQorICAJICAgIGlmICgh ZGVjbHNfbWF0Y2ggKGZuLCBUUkVFX1BVUlBPU0UgKG1hdGNoKSkpCisJICAg ICAgYnJlYWs7CisJfQorCiAgICAgICBpZiAobWF0Y2gpCiAJewogCSAgaWYg KGZsYWdzICYgdGZfZXJyb3IpCkBAIC03MTQ4LDYgKzcxODUsMjggQEAgcmVz b2x2ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rpb24gKHRyZWUgdGFy Z2UKICAgICAgIHBlcmZvcm1fb3JfZGVmZXJfYWNjZXNzX2NoZWNrIChhY2Nl c3NfcGF0aCwgZm4sIGZuLCBmbGFncyk7CiAgICAgfQogCisgIC8qIElmIGEg cG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgbXVsdGktdmVyc2lvbmVk IGlzIHJlcXVlc3RlZCwgdGhlCisgICAgIHBvaW50ZXIgdG8gdGhlIGRpc3Bh dGNoZXIgZnVuY3Rpb24gaXMgcmV0dXJuZWQgaW5zdGVhZC4gIFRoaXMgd29y a3MKKyAgICAgd2VsbCBiZWNhdXNlIGluZGlyZWN0bHkgY2FsbGluZyB0aGUg ZnVuY3Rpb24gd2lsbCBkaXNwYXRjaCB0aGUgcmlnaHQKKyAgICAgZnVuY3Rp b24gdmVyc2lvbiBhdCBydW4tdGltZS4gICovCisgIGlmIChERUNMX0ZVTkNU SU9OX1ZFUlNJT05FRCAoZm4pKQorICAgIHsKKyAgICAgIHRyZWUgZGlzcGF0 Y2hlcl9kZWNsID0gTlVMTDsKKyAgICAgIGdjY19hc3NlcnQgKGZuX3Zlcl92 ZWMgIT0gTlVMTCk7CisgICAgICBnY2NfYXNzZXJ0ICh0YXJnZXRtLmdldF9m dW5jdGlvbl92ZXJzaW9uc19kaXNwYXRjaGVyKTsKKyAgICAgIGRpc3BhdGNo ZXJfZGVjbCA9IHRhcmdldG0uZ2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3Bh dGNoZXIgKGZuX3Zlcl92ZWMpOworICAgICAgaWYgKCFkaXNwYXRjaGVyX2Rl Y2wpCisJeworCSAgZXJyb3JfYXQgKGlucHV0X2xvY2F0aW9uLCAiUG9pbnRl ciB0byBhIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uIgorCQkgICAgIiB3aXRo b3V0IGEgZGVmYXVsdCBpcyBub3QgYWxsb3dlZCIpOworCSAgcmV0dXJuIGVy cm9yX21hcmtfbm9kZTsKKwl9CisgICAgICByZXRyb2ZpdF9sYW5nX2RlY2wg KGRpc3BhdGNoZXJfZGVjbCk7CisgICAgICBtYXJrX3VzZWQgKGZuKTsKKyAg ICAgIFZFQ19mcmVlICh0cmVlLCBoZWFwLCBmbl92ZXJfdmVjKTsKKyAgICAg IGZuID0gZGlzcGF0Y2hlcl9kZWNsOworICAgIH0KKwogICBpZiAoVFlQRV9Q VFJGTl9QICh0YXJnZXRfdHlwZSkgfHwgVFlQRV9QVFJNRU1GVU5DX1AgKHRh cmdldF90eXBlKSkKICAgICByZXR1cm4gY3BfYnVpbGRfYWRkcl9leHByIChm biwgZmxhZ3MpOwogICBlbHNlCkluZGV4OiBnY2MvY3AvZGVjbC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9kZWNsLmMJKHJldmlzaW9u IDE5MDQ5MykKKysrIGdjYy9jcC9kZWNsLmMJKHdvcmtpbmcgY29weSkKQEAg LTUzLDYgKzUzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJwb2ludGVyLXNldC5o IgogI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRlICJwbHVnaW4u aCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKIAogLyogUG9zc2libGUgY2FzZXMg b2YgYmFkIHNwZWNpZmllcnMgdHlwZSB1c2VkIGJ5IGJhZF9zcGVjaWZpZXJz LiAqLwogZW51bSBiYWRfc3BlY19wbGFjZSB7CkBAIC05NzIsNiArOTczLDE3 IEBAIGRlY2xzX21hdGNoICh0cmVlIG5ld2RlY2wsIHRyZWUgb2xkZGVjbCkK ICAgICAgIGlmICh0MSAhPSB0MikKIAlyZXR1cm4gMDsKIAorICAgICAgLyog VGhlIGRlY2xzIGRvbnQgbWF0Y2ggaWYgdGhleSBjb3JyZXNwb25kIHRvIHR3 byBkaWZmZXJlbnQgdmVyc2lvbnMKKwkgb2YgdGhlIHNhbWUgZnVuY3Rpb24u ICAqLworICAgICAgaWYgKGNvbXBwYXJtcyAocDEsIHAyKQorCSAgJiYgc2Ft ZV90eXBlX3AgKFRSRUVfVFlQRSAoZjEpLCBUUkVFX1RZUEUgKGYyKSkgCisJ ICAmJiB0YXJnZXRtLnRhcmdldF9vcHRpb24uZnVuY3Rpb25fdmVyc2lvbnMg KG5ld2RlY2wsIG9sZGRlY2wpKQorCXsKKwkgIHRhcmdldG0uc2V0X3ZlcnNp b25fYXNzZW1ibGVyX25hbWUobmV3ZGVjbCk7CisJICB0YXJnZXRtLnNldF92 ZXJzaW9uX2Fzc2VtYmxlcl9uYW1lKG9sZGRlY2wpOworCSAgcmV0dXJuIDA7 CisJfQorCiAgICAgICBpZiAoQ1BfREVDTF9DT05URVhUIChuZXdkZWNsKSAh PSBDUF9ERUNMX0NPTlRFWFQgKG9sZGRlY2wpCiAJICAmJiAhIChERUNMX0VY VEVSTl9DX1AgKG5ld2RlY2wpCiAJCSYmIERFQ0xfRVhURVJOX0NfUCAob2xk ZGVjbCkpKQpAQCAtMTQ5MCw3ICsxNTAyLDExIEBAIGR1cGxpY2F0ZV9kZWNs cyAodHJlZSBuZXdkZWNsLCB0cmVlIG9sZGRlY2wsIGJvb2wKIAkgICAgICBl cnJvciAoInByZXZpb3VzIGRlY2xhcmF0aW9uICVxKyNEIGhlcmUiLCBvbGRk ZWNsKTsKIAkgICAgICByZXR1cm4gTlVMTF9UUkVFOwogCSAgICB9Ci0JICBl bHNlIGlmIChjb21wcGFybXMgKFRZUEVfQVJHX1RZUEVTIChUUkVFX1RZUEUg KG5ld2RlY2wpKSwKKwkgIC8qIEZvciBmdW5jdGlvbiB2ZXJzaW9ucywgcGFy YW1zIGFuZCB0eXBlcyBtYXRjaCwgYnV0IHRoZXkKKwkgICAgIGFyZSBub3Qg YW1iaWd1b3VzLiAgKi8KKwkgIGVsc2UgaWYgKCghREVDTF9GVU5DVElPTl9W RVJTSU9ORUQgKG5ld2RlY2wpCisJCSAgICAmJiAhREVDTF9GVU5DVElPTl9W RVJTSU9ORUQgKG9sZGRlY2wpKQorCQkgICAmJiBjb21wcGFybXMgKFRZUEVf QVJHX1RZUEVTIChUUkVFX1RZUEUgKG5ld2RlY2wpKSwKIAkJCSAgICAgIFRZ UEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKG9sZGRlY2wpKSkpCiAJICAgIHsK IAkgICAgICBlcnJvciAoIm5ldyBkZWNsYXJhdGlvbiAlcSNEIiwgbmV3ZGVj bCk7CkBAIC0yMjYyLDYgKzIyNzgsMTEgQEAgZHVwbGljYXRlX2RlY2xzICh0 cmVlIG5ld2RlY2wsIHRyZWUgb2xkZGVjbCwgYm9vbAogICBlbHNlIGlmIChE RUNMX1BSRVNFUlZFX1AgKG5ld2RlY2wpKQogICAgIERFQ0xfUFJFU0VSVkVf UCAob2xkZGVjbCkgPSAxOwogCisgIC8qIElmIHRoZSBvbGRkZWNsIGlzIGEg dmVyc2lvbiwgc28gaXMgdGhlIG5ld2RlY2wuICAqLworICBpZiAoVFJFRV9D T0RFIChuZXdkZWNsKSA9PSBGVU5DVElPTl9ERUNMCisgICAgICAmJiBERUNM X0ZVTkNUSU9OX1ZFUlNJT05FRCAob2xkZGVjbCkpCisgICAgREVDTF9GVU5D VElPTl9WRVJTSU9ORUQgKG5ld2RlY2wpID0gMTsKKwogICBpZiAoVFJFRV9D T0RFIChuZXdkZWNsKSA9PSBGVU5DVElPTl9ERUNMKQogICAgIHsKICAgICAg IGludCBmdW5jdGlvbl9zaXplOwpAQCAtMTQwMjQsNyArMTQwNDUsMTEgQEAg Y3h4X2NvbWRhdF9ncm91cCAodHJlZSBkZWNsKQogCSAgZWxzZQogCSAgICBi cmVhazsKIAl9Ci0gICAgICBuYW1lID0gREVDTF9BU1NFTUJMRVJfTkFNRSAo ZGVjbCk7CisgICAgICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElP Tl9ERUNMCisJICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbCkp CisJbmFtZSA9IERFQ0xfTkFNRSAoZGVjbCk7CisgICAgICBlbHNlCisgICAg ICAgIG5hbWUgPSBERUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsKTsKICAgICB9 CiAKICAgcmV0dXJuIG5hbWU7CkluZGV4OiBnY2MvY3AvZXJyb3IuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3AvZXJyb3IuYwkocmV2aXNp b24gMTkwNDkzKQorKysgZ2NjL2NwL2Vycm9yLmMJKHdvcmtpbmcgY29weSkK QEAgLTE1MzksOCArMTUzOSwxNSBAQCBkdW1wX2V4Y2VwdGlvbl9zcGVjICh0 cmVlIHQsIGludCBmbGFncykKIHN0YXRpYyB2b2lkCiBkdW1wX2Z1bmN0aW9u X25hbWUgKHRyZWUgdCwgaW50IGZsYWdzKQogewotICB0cmVlIG5hbWUgPSBE RUNMX05BTUUgKHQpOworICB0cmVlIG5hbWU7CiAKKyAgLyogRm9yIGZ1bmN0 aW9uIHZlcnNpb25zLCB1c2UgdGhlIGFzc2VtYmxlciBuYW1lIGFzIHRoZSBk ZWNsIG5hbWUgaXMKKyAgICAgdGhlIHNhbWUgZm9yIGFsbCB2ZXJzaW9ucy4g ICovCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAodCkpCisgICAg bmFtZSA9IERFQ0xfQVNTRU1CTEVSX05BTUUgKHQpOworICBlbHNlCisgICAg bmFtZSA9IERFQ0xfTkFNRSAodCk7CisKICAgLyogV2UgY2FuIGdldCBoZXJl IHdpdGggYSBkZWNsIHRoYXQgd2FzIHN5bnRoZXNpemVkIGJ5IGxhbmd1YWdl LQogICAgICBpbmRlcGVuZGVudCBtYWNoaW5lcnkgKGUuZy4gY292ZXJhZ2Uu YykgaW4gd2hpY2ggY2FzZSBpdCB3b24ndAogICAgICBoYXZlIGEgbGFuZ19z cGVjaWZpYyBzdHJ1Y3R1cmUgYXR0YWNoZWQgYW5kIERFQ0xfQ09OU1RSVUNU T1JfUApJbmRleDogZ2NjL2NwL3NlbWFudGljcy5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9jcC9zZW1hbnRpY3MuYwkocmV2aXNpb24gMTkw NDkzKQorKysgZ2NjL2NwL3NlbWFudGljcy5jCSh3b3JraW5nIGNvcHkpCkBA IC0zNzc1LDggKzM3NzUsMTEgQEAgZXhwYW5kX29yX2RlZmVyX2ZuXzEgKHRy ZWUgZm4pCiAgICAgICAvKiBJZiB0aGUgdXNlciB3YW50cyB1cyB0byBrZWVw IGFsbCBpbmxpbmUgZnVuY3Rpb25zLCB0aGVuIG1hcmsKIAkgdGhpcyBmdW5j dGlvbiBhcyBuZWVkZWQgc28gdGhhdCBmaW5pc2hfZmlsZSB3aWxsIG1ha2Ug c3VyZSB0bwogCSBvdXRwdXQgaXQgbGF0ZXIuICBTaW1pbGFybHksIGFsbCBk bGxleHBvcnQnZCBmdW5jdGlvbnMgbXVzdAotCSBiZSBlbWl0dGVkOyB0aGVy ZSBtYXkgYmUgY2FsbGVycyBpbiBvdGhlciBETExzLiAgKi8KLSAgICAgIGlm ICgoZmxhZ19rZWVwX2lubGluZV9mdW5jdGlvbnMKKwkgYmUgZW1pdHRlZDsg dGhlcmUgbWF5IGJlIGNhbGxlcnMgaW4gb3RoZXIgRExMcy4KKwkgQWxzbywg bWFyayB0aGlzIGZ1bmN0aW9uIGFzIG5lZWRlZCBpZiBpdCBpcyBtYXJrZWQg aW5saW5lIGJ1dAorCSBpcyBhIG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbi4g ICovCisgICAgICBpZiAoKChmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucwor CSAgICB8fCBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pKQogCSAgICYm IERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKGZuKQogCSAgICYmICFERUNMX1JF QUxMWV9FWFRFUk4gKGZuKSkKIAkgIHx8IChmbGFnX2tlZXBfaW5saW5lX2Rs bGV4cG9ydApJbmRleDogZ2NjL2NwL2RlY2wyLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjL2NwL2RlY2wyLmMJKHJldmlzaW9uIDE5MDQ5MykK KysrIGdjYy9jcC9kZWNsMi5jCSh3b3JraW5nIGNvcHkpCkBAIC02NzQsOSAr Njc0LDEzIEBAIGNoZWNrX2NsYXNzZm4gKHRyZWUgY3R5cGUsIHRyZWUgZnVu Y3Rpb24sIHRyZWUgdGVtCiAJICBpZiAoaXNfdGVtcGxhdGUgIT0gKFRSRUVf Q09ERSAoZm5kZWNsKSA9PSBURU1QTEFURV9ERUNMKSkKIAkgICAgY29udGlu dWU7CiAKKwkgIC8qIFdoaWxlIGZpbmRpbmcgYSBtYXRjaCwgc2FtZSB0eXBl cyBhbmQgcGFyYW1zIGFyZSBub3QgZW5vdWdoCisJICAgICBpZiB0aGUgZnVu Y3Rpb24gaXMgdmVyc2lvbmVkLiAgQWxzbyBjaGVjayB2ZXJzaW9uICgidGFy Z2V0IikKKwkgICAgIGF0dHJpYnV0ZXMuICAqLwogCSAgaWYgKHNhbWVfdHlw ZV9wIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAoZnVuY3Rpb24pKSwKIAkJCSAg IFRSRUVfVFlQRSAoVFJFRV9UWVBFIChmbmRlY2wpKSkKIAkgICAgICAmJiBj b21wcGFybXMgKHAxLCBwMikKKwkgICAgICAmJiAhdGFyZ2V0bS50YXJnZXRf b3B0aW9uLmZ1bmN0aW9uX3ZlcnNpb25zIChmdW5jdGlvbiwgZm5kZWNsKQog CSAgICAgICYmICghaXNfdGVtcGxhdGUKIAkJICB8fCBjb21wX3RlbXBsYXRl X3Bhcm1zICh0ZW1wbGF0ZV9wYXJtcywKIAkJCQkJICBERUNMX1RFTVBMQVRF X1BBUk1TIChmbmRlY2wpKSkKSW5kZXg6IGdjYy9jcC9jYWxsLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NwL2NhbGwuYwkocmV2aXNpb24g MTkwNDkzKQorKysgZ2NjL2NwL2NhbGwuYwkod29ya2luZyBjb3B5KQpAQCAt NDAsNiArNDAsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENP UFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImxhbmdob29rcy5oIgog I2luY2x1ZGUgImMtZmFtaWx5L2Mtb2JqYy5oIgogI2luY2x1ZGUgInRpbWV2 YXIuaCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKIAogLyogVGhlIHZhcmlvdXMg a2luZHMgb2YgY29udmVyc2lvbi4gICovCiAKQEAgLTM5MTAsNiArMzkxMSwx NiBAQCBidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCAodHJlZSBmbiwgVkVDKHRy ZWUsZ2MpICoqYQogICAgIHsKICAgICAgIGlmIChjb21wbGFpbiAmIHRmX2Vy cm9yKQogCXsKKwkgIC8qIElmIHRoZSBjYWxsIGlzIHRvIGEgbXVsdGl2ZXJz aW9uZWQgZnVuY3Rpb24gd2l0aG91dAorCSAgICAgYSBkZWZhdWx0IHZlcnNp b24sIG92ZXJsb2FkIHJlc29sdXRpb24gd2lsbCBmYWlsLiAgKi8KKwkgIGlm IChjYW5kaWRhdGVzCisJICAgICAgJiYgVFJFRV9DT0RFIChjYW5kaWRhdGVz LT5mbikgPT0gRlVOQ1RJT05fREVDTAorCSAgICAgICYmIERFQ0xfRlVOQ1RJ T05fVkVSU0lPTkVEIChjYW5kaWRhdGVzLT5mbikpCisJICAgIGVycm9yX2F0 IChsb2NhdGlvbl9vZiAoREVDTF9OQU1FIChPVkxfQ1VSUkVOVCAoZm4pKSks CisJCSAgICAgICJDYWxsIHRvIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uICU8 JUQoJUEpJT4gd2l0aCIKKwkJICAgICAgIiBubyBkZWZhdWx0IHZlcnNpb24i LCBERUNMX05BTUUgKE9WTF9DVVJSRU5UIChmbikpLAorCQkgICAgICBidWls ZF90cmVlX2xpc3RfdmVjICgqYXJncykpOworCiAJICBpZiAoIWFueV92aWFi bGVfcCAmJiBjYW5kaWRhdGVzICYmICEgY2FuZGlkYXRlcy0+bmV4dAogCSAg ICAgICYmIChUUkVFX0NPREUgKGNhbmRpZGF0ZXMtPmZuKSA9PSBGVU5DVElP Tl9ERUNMKSkKIAkgICAgcmV0dXJuIGNwX2J1aWxkX2Z1bmN0aW9uX2NhbGxf dmVjIChjYW5kaWRhdGVzLT5mbiwgYXJncywgY29tcGxhaW4pOwpAQCAtNjg1 OCw2ICs2ODY5LDMwIEBAIGJ1aWxkX292ZXJfY2FsbCAoc3RydWN0IHpfY2Fu ZGlkYXRlICpjYW5kLCBpbnQgZmxhCiAgIGlmICghYWxyZWFkeV91c2VkKQog ICAgIG1hcmtfdXNlZCAoZm4pOwogCisgIC8qIEZvciBjYWxscyB0byBhIG11 bHRpLXZlcnNpb25lZCBmdW5jdGlvbiwgb3ZlcmxvYWQgcmVzb2x1dGlvbgor ICAgICByZXR1cm5zIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBoaWdoZXN0IHRh cmdldCBwcmlvcml0eSwgdGhhdCBpcywKKyAgICAgdGhlIHZlcnNpb24gdGhh dCB3aWxsIGNoZWNrZWQgZm9yIGRpc3BhdGNoaW5nIGZpcnN0LiAgSWYgdGhp cworICAgICB2ZXJzaW9uIGlzIGlubGluYWJsZSwgYSBkaXJlY3QgY2FsbCBj YW4gYmUgbWFkZSBvdGhlcndpc2UgaXQKKyAgICAgc2hvdWxkIGdvIHRocm91 Z2ggdGhlIGRpc3BhdGNoZXIuICAqLworCisgIGlmIChERUNMX0ZVTkNUSU9O X1ZFUlNJT05FRCAoZm4pCisgICAgICAmJiAhdGFyZ2V0bS50YXJnZXRfb3B0 aW9uLmNhbl9pbmxpbmVfcCAoY3VycmVudF9mdW5jdGlvbl9kZWNsLCBmbikp CisgICAgeworICAgICAgdHJlZSBkaXNwYXRjaGVyX2RlY2wgPSBOVUxMOwor ICAgICAgc3RydWN0IGNncmFwaF9ub2RlICpub2RlID0gY2dyYXBoX2dldF9u b2RlIChmbik7CisgICAgICBpZiAobm9kZSAhPSBOVUxMKQorICAgICAgICBk aXNwYXRjaGVyX2RlY2wgPSBjZ3JhcGhfZ2V0X25vZGUgKGZuKS0+dmVyc2lv bl9kaXNwYXRjaGVyX2RlY2w7CisgICAgICBpZiAoZGlzcGF0Y2hlcl9kZWNs ID09IE5VTEwpCisJeworCSAgZXJyb3JfYXQgKGlucHV0X2xvY2F0aW9uLCAi Q2FsbCB0byBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbiIKKwkJICAgICIgd2l0 aG91dCBhIGRlZmF1bHQgaXMgbm90IGFsbG93ZWQiKTsKKwkgIHJldHVybiBO VUxMOworCX0KKyAgICAgIHJldHJvZml0X2xhbmdfZGVjbCAoZGlzcGF0Y2hl cl9kZWNsKTsKKyAgICAgIGdjY19hc3NlcnQgKGRpc3BhdGNoZXJfZGVjbCAh PSBOVUxMKTsKKyAgICAgIGZuID0gZGlzcGF0Y2hlcl9kZWNsOworICAgIH0K KwogICBpZiAoREVDTF9WSU5ERVggKGZuKSAmJiAoZmxhZ3MgJiBMT09LVVBf Tk9OVklSVFVBTCkgPT0gMCkKICAgICB7CiAgICAgICB0cmVlIHQ7CkBAIC04 MTIzLDYgKzgxNTgsMjkgQEAgam91c3QgKHN0cnVjdCB6X2NhbmRpZGF0ZSAq Y2FuZDEsIHN0cnVjdCB6X2NhbmRpZGEKICAgc2l6ZV90IGk7CiAgIHNpemVf dCBsZW47CiAKKyAgLyogRm9yIENhbmRpZGF0ZXMgb2YgYSBtdWx0aS12ZXJz aW9uZWQgZnVuY3Rpb24sICBtYWtlIHRoZSB2ZXJzaW9uIHdpdGgKKyAgICAg dGhlIGhpZ2hlc3QgcHJpb3JpdHkgd2luLiAgVGhpcyB2ZXJzaW9uIHdpbGwg YmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2hpbmcKKyAgICAgZmlyc3QuICBJZiB0 aGlzIHZlcnNpb24gY2FuIGJlIGlubGluZWQgaW50byB0aGUgY2FsbGVyIHRo ZSBmcm9udC1lbmQKKyAgICAgd2lsbCBzaW1wbHkgbWFrZSBhIGRpcmVjdCBj YWxsIHRvIHRoaXMgZnVuY3Rpb24uICAqLworCisgIGlmICgoVFJFRV9DT0RF IChjYW5kMS0+Zm4pID09IEZVTkNUSU9OX0RFQ0wKKyAgICAgICAmJiBERUNM X0ZVTkNUSU9OX1ZFUlNJT05FRCAoY2FuZDEtPmZuKSkKKyAgICAgIHx8KFRS RUVfQ09ERSAoY2FuZDItPmZuKSA9PSBGVU5DVElPTl9ERUNMCisJICYmIERF Q0xfRlVOQ1RJT05fVkVSU0lPTkVEIChjYW5kMi0+Zm4pKSkKKyAgICB7Cisg ICAgICAvKiBCb3RoIGZ1bmN0aW9ucyBtdXN0IGJlIG1hcmtlZCB2ZXJzaW9u ZWQuICAqLworICAgICAgZ2NjX2Fzc2VydCAoREVDTF9GVU5DVElPTl9WRVJT SU9ORUQgKGNhbmQxLT5mbikKKwkJICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJ T05FRCAoY2FuZDItPmZuKSk7CisKKyAgICAgIC8qIEFsd2F5cyBtYWtlIHRo ZSB2ZXJzaW9uIHdpdGggdGhlIGhpZ2hlciBwcmlvcml0eSwgbW9yZQorCSBz cGVjaWFsaXplZCwgd2luLiAgKi8KKyAgICAgIGdjY19hc3NlcnQgKHRhcmdl dG0uY29tcGFyZV92ZXJzaW9uX3ByaW9yaXR5KTsKKyAgICAgIGlmICh0YXJn ZXRtLmNvbXBhcmVfdmVyc2lvbl9wcmlvcml0eSAoY2FuZDEtPmZuLCBjYW5k Mi0+Zm4pID49IDApCisJcmV0dXJuIDE7CisgICAgICBlbHNlCisJcmV0dXJu IC0xOworICAgIH0KKwogICAvKiBDYW5kaWRhdGVzIHRoYXQgaW52b2x2ZSBi YWQgY29udmVyc2lvbnMgYXJlIGFsd2F5cyB3b3JzZSB0aGFuIHRob3NlCiAg ICAgIHRoYXQgZG9uJ3QuICAqLwogICBpZiAoY2FuZDEtPnZpYWJsZSA+IGNh bmQyLT52aWFibGUpCkBAIC04NDY4LDYgKzg1MjYsMjIgQEAgdG91cm5leSAo c3RydWN0IHpfY2FuZGlkYXRlICpjYW5kaWRhdGVzLCB0c3Vic3RfZmwKICAg aW50IGZhdGU7CiAgIGludCBjaGFtcF9jb21wYXJlZF90b19wcmVkZWNlc3Nv ciA9IDA7CiAKKyAgLyogRm9yIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9ucywg YWdncmVnYXRlIGFsbCB0aGUgdmVyc2lvbnMgaGVyZSBmb3IKKyAgICAgZ2Vu ZXJhdGluZyB0aGUgZGlzcGF0Y2hlciBib2R5IGxhdGVyIGlmIG5lY2Vzc2Fy eS4gICovCisKKyAgaWYgKFRSRUVfQ09ERSAoY2FuZGlkYXRlcy0+Zm4pID09 IEZVTkNUSU9OX0RFQ0wKKyAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEIChjYW5kaWRhdGVzLT5mbikpCisgICAgeworICAgICAgVkVDICh0cmVl LCBoZWFwKSAqZm5fdmVyX3ZlYyA9IE5VTEw7CisgICAgICBzdHJ1Y3Qgel9j YW5kaWRhdGUgKnZlciA9IGNhbmRpZGF0ZXM7CisgICAgICBmbl92ZXJfdmVj ID0gVkVDX2FsbG9jICh0cmVlLCBoZWFwLCAyKTsKKyAgICAgIGZvciAoO3Zl cjsgdmVyID0gdmVyLT5uZXh0KQorICAgICAgICBWRUNfc2FmZV9wdXNoICh0 cmVlLCBoZWFwLCBmbl92ZXJfdmVjLCB2ZXItPmZuKTsKKyAgICAgIGdjY19h c3NlcnQgKHRhcmdldG0uZ2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNo ZXIpOworICAgICAgdGFyZ2V0bS5nZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlz cGF0Y2hlciAoZm5fdmVyX3ZlYyk7CisgICAgICBWRUNfZnJlZSAodHJlZSwg aGVhcCwgZm5fdmVyX3ZlYyk7CisgICAgfQorCiAgIC8qIFdhbGsgdGhyb3Vn aCB0aGUgbGlzdCBvbmNlLCBjb21wYXJpbmcgZWFjaCBjdXJyZW50IGNoYW1w IHRvIHRoZSBuZXh0CiAgICAgIGNhbmRpZGF0ZSwga25vY2tpbmcgb3V0IGEg Y2FuZGlkYXRlIG9yIHR3byB3aXRoIGVhY2ggY29tcGFyaXNvbi4gICovCiAK SW5kZXg6IGdjYy9jcC9tYW5nbGUuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvY3AvbWFuZ2xlLmMJKHJldmlzaW9uIDE5MDQ5MykKKysrIGdj Yy9jcC9tYW5nbGUuYwkod29ya2luZyBjb3B5KQpAQCAtMTI0NSw3ICsxMjQ1 LDEyIEBAIHdyaXRlX3VucXVhbGlmaWVkX25hbWUgKGNvbnN0IHRyZWUgZGVj bCkKICAgICB7CiAgICAgICBNQU5HTEVfVFJBQ0VfVFJFRSAoImxvY2FsLXNv dXJjZS1uYW1lIiwgZGVjbCk7CiAgICAgICB3cml0ZV9jaGFyICgnTCcpOwot ICAgICAgd3JpdGVfc291cmNlX25hbWUgKERFQ0xfTkFNRSAoZGVjbCkpOwor ICAgICAgaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTAor ICAgICAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKQor CSAgJiYgREVDTF9BU1NFTUJMRVJfTkFNRV9TRVRfUCAoZGVjbCkpCisJd3Jp dGVfc291cmNlX25hbWUgKERFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wpKTsK KyAgICAgIGVsc2UKKwl3cml0ZV9zb3VyY2VfbmFtZSAoREVDTF9OQU1FIChk ZWNsKSk7CiAgICAgICAvKiBUaGUgZGVmYXVsdCBkaXNjcmltaW5hdG9yIGlz IDEsIGFuZCB0aGF0J3MgYWxsIHdlIGV2ZXIgdXNlLAogCSBzbyB0aGVyZSdz IG5vIGNvZGUgdG8gb3V0cHV0IG9uZSBoZXJlLiAgKi8KICAgICB9CkBAIC0x MjYwLDcgKzEyNjUsMTQgQEAgd3JpdGVfdW5xdWFsaWZpZWRfbmFtZSAoY29u c3QgdHJlZSBkZWNsKQogICAgICAgICAgICAgICAgJiYgTEFNQkRBX1RZUEVf UCAodHlwZSkpCiAgICAgICAgIHdyaXRlX2Nsb3N1cmVfdHlwZV9uYW1lICh0 eXBlKTsKICAgICAgIGVsc2UKLSAgICAgICAgd3JpdGVfc291cmNlX25hbWUg KERFQ0xfTkFNRSAoZGVjbCkpOworCXsKKwkgIGlmIChUUkVFX0NPREUgKGRl Y2wpID09IEZVTkNUSU9OX0RFQ0wKKwkgICAgICAmJiBERUNMX0ZVTkNUSU9O X1ZFUlNJT05FRCAoZGVjbCkKKwkgICAgICAmJiBERUNMX0FTU0VNQkxFUl9O QU1FX1NFVF9QIChkZWNsKSkKKwkgICAgd3JpdGVfc291cmNlX25hbWUgKERF Q0xfQVNTRU1CTEVSX05BTUUgKGRlY2wpKTsKKwkgIGVsc2UKKwkgICAgd3Jp dGVfc291cmNlX25hbWUgKERFQ0xfTkFNRSAoZGVjbCkpOworCX0KICAgICB9 CiB9CiAKSW5kZXg6IGdjYy9jb25maWcvaTM4Ni9pMzg2LmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwkocmV2 aXNpb24gMTkwNDkzKQorKysgZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwkod29y a2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBhbG9uZyB3aXRoIEdDQzsg c2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUg Im9wdHMuaCIKICNpbmNsdWRlICJkaWFnbm9zdGljLmgiCiAjaW5jbHVkZSAi ZHVtcGZpbGUuaCIKKyNpbmNsdWRlICJ0cmVlLXBhc3MuaCIKKyNpbmNsdWRl ICJ0cmVlLWZsb3cuaCIKIAogZW51bSB1cHBlcl8xMjhiaXRzX3N0YXRlCiB7 CkBAIC0yODAzMCw2ICsyODAzMiw5ODAgQEAgaXg4Nl9pbml0X21teF9zc2Vf YnVpbHRpbnMgKHZvaWQpCiAgICAgfQogfQogCisKKy8qIFRoaXMgYWRkcyBh IGNvbmRpdGlvbiB0byB0aGUgYmFzaWNfYmxvY2sgTkVXX0JCIGluIGZ1bmN0 aW9uIEZVTkNUSU9OX0RFQ0wKKyAgIHRvIHJldHVybiBhIHBvaW50ZXIgdG8g VkVSU0lPTl9ERUNMIGlmIHRoZSBvdXRjb21lIG9mIHRoZSBleHByZXNzaW9u CisgICBmb3JtZWQgYnkgUFJFRElDQVRFX0NIQUlOIGlzIHRydWUuICBUaGlz IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGR1cmluZworICAgdmVyc2lvbiBk aXNwYXRjaCB0byBkZWNpZGUgd2hpY2ggZnVuY3Rpb24gdmVyc2lvbiB0byBl eGVjdXRlLiAgSXQgcmV0dXJucworICAgdGhlIGJhc2ljIGJsb2NrIGF0IHRo ZSBlbmQsIHRvIHdoaWNoIG1vcmUgY29uZGl0aW9ucyBjYW4gYmUgYWRkZWQu ICAqLworCitzdGF0aWMgYmFzaWNfYmxvY2sKK2FkZF9jb25kaXRpb25fdG9f YmIgKHRyZWUgZnVuY3Rpb25fZGVjbCwgdHJlZSB2ZXJzaW9uX2RlY2wsCisJ CSAgICAgdHJlZSBwcmVkaWNhdGVfY2hhaW4sIGJhc2ljX2Jsb2NrIG5ld19i YikKK3sKKyAgZ2ltcGxlIHJldHVybl9zdG10OworICB0cmVlIGNvbnZlcnRf ZXhwciwgcmVzdWx0X3ZhcjsKKyAgZ2ltcGxlIGNvbnZlcnRfc3RtdDsKKyAg Z2ltcGxlIGNhbGxfY29uZF9zdG10OworICBnaW1wbGUgaWZfZWxzZV9zdG10 OworCisgIGJhc2ljX2Jsb2NrIGJiMSwgYmIyLCBiYjM7CisgIGVkZ2UgZTEy LCBlMjM7CisKKyAgdHJlZSBjb25kX3ZhciwgYW5kX2V4cHJfdmFyID0gTlVM TF9UUkVFOworICBnaW1wbGVfc2VxIGdzZXE7CisKKyAgdHJlZSBvbGRfY3Vy cmVudF9mdW5jdGlvbl9kZWNsOworICB0cmVlIHByZWRpY2F0ZV9kZWNsLCBw cmVkaWNhdGVfYXJnOworCisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wg PSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9T VFJVQ1RfRlVOQ1RJT04gKGZ1bmN0aW9uX2RlY2wpKTsKKyAgY3VycmVudF9m dW5jdGlvbl9kZWNsID0gZnVuY3Rpb25fZGVjbDsKKworICBnY2NfYXNzZXJ0 IChuZXdfYmIgIT0gTlVMTCk7CisgIGdzZXEgPSBiYl9zZXEgKG5ld19iYik7 CisKKworICBjb252ZXJ0X2V4cHIgPSBidWlsZDEgKENPTlZFUlRfRVhQUiwg cHRyX3R5cGVfbm9kZSwKKwkgICAgIAkJIGJ1aWxkX2ZvbGRfYWRkcl9leHBy ICh2ZXJzaW9uX2RlY2wpKTsKKyAgcmVzdWx0X3ZhciA9IGNyZWF0ZV90bXBf dmFyIChwdHJfdHlwZV9ub2RlLCBOVUxMKTsKKyAgY29udmVydF9zdG10ID0g Z2ltcGxlX2J1aWxkX2Fzc2lnbiAocmVzdWx0X3ZhciwgY29udmVydF9leHBy KTsgCisgIHJldHVybl9zdG10ID0gZ2ltcGxlX2J1aWxkX3JldHVybiAocmVz dWx0X3Zhcik7CisKKyAgaWYgKHByZWRpY2F0ZV9jaGFpbiA9PSBOVUxMX1RS RUUpCisgICAgeworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEs IGNvbnZlcnRfc3RtdCk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgm Z3NlcSwgcmV0dXJuX3N0bXQpOworICAgICAgc2V0X2JiX3NlcSAobmV3X2Ji LCBnc2VxKTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKGNvbnZlcnRfc3RtdCwg bmV3X2JiKTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKHJldHVybl9zdG10LCBu ZXdfYmIpOworICAgICAgcG9wX2NmdW4gKCk7CisgICAgICBjdXJyZW50X2Z1 bmN0aW9uX2RlY2wgPSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAg ICAgcmV0dXJuIG5ld19iYjsKKyAgICB9CisKKyAgd2hpbGUgKHByZWRpY2F0 ZV9jaGFpbiAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNvbmRfdmFyID0gY3Jl YXRlX3RtcF92YXIgKGludGVnZXJfdHlwZV9ub2RlLCBOVUxMKTsKKyAgICAg IHByZWRpY2F0ZV9kZWNsID0gVFJFRV9QVVJQT1NFIChwcmVkaWNhdGVfY2hh aW4pOworICAgICAgcHJlZGljYXRlX2FyZyA9IFRSRUVfVkFMVUUgKHByZWRp Y2F0ZV9jaGFpbik7CisgICAgICBjYWxsX2NvbmRfc3RtdCA9IGdpbXBsZV9i dWlsZF9jYWxsIChwcmVkaWNhdGVfZGVjbCwgMSwgcHJlZGljYXRlX2FyZyk7 CisgICAgICBnaW1wbGVfY2FsbF9zZXRfbGhzIChjYWxsX2NvbmRfc3RtdCwg Y29uZF92YXIpOworCisgICAgICBnaW1wbGVfc2V0X2Jsb2NrIChjYWxsX2Nv bmRfc3RtdCwgREVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7CisgICAg ICBnaW1wbGVfc2V0X2JiIChjYWxsX2NvbmRfc3RtdCwgbmV3X2JiKTsKKyAg ICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBjYWxsX2NvbmRfc3Rt dCk7CisKKyAgICAgIHByZWRpY2F0ZV9jaGFpbiA9IFRSRUVfQ0hBSU4gKHBy ZWRpY2F0ZV9jaGFpbik7CisgICAgICAKKyAgICAgIGlmIChhbmRfZXhwcl92 YXIgPT0gTlVMTCkKKyAgICAgICAgYW5kX2V4cHJfdmFyID0gY29uZF92YXI7 CisgICAgICBlbHNlCisJeworCSAgZ2ltcGxlIGFzc2lnbl9zdG10OworCSAg LyogVXNlIE1JTl9FWFBSIHRvIGNoZWNrIGlmIGFueSBpbnRlZ2VyIGlzIHpl cm8/LgorCSAgICAgYW5kX2V4cHJfdmFyID0gbWluX2V4cHIgPGNvbmRfdmFy LCBhbmRfZXhwcl92YXI+ICAqLworCSAgYXNzaWduX3N0bXQgPSBnaW1wbGVf YnVpbGRfYXNzaWduIChhbmRfZXhwcl92YXIsCisJCQkgIGJ1aWxkMiAoTUlO X0VYUFIsIGludGVnZXJfdHlwZV9ub2RlLAorCQkJCSAgY29uZF92YXIsIGFu ZF9leHByX3ZhcikpOworCisJICBnaW1wbGVfc2V0X2Jsb2NrIChhc3NpZ25f c3RtdCwgREVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7CisJICBnaW1w bGVfc2V0X2JiIChhc3NpZ25fc3RtdCwgbmV3X2JiKTsKKwkgIGdpbXBsZV9z ZXFfYWRkX3N0bXQgKCZnc2VxLCBhc3NpZ25fc3RtdCk7CisJfQorICAgIH0K KworICBpZl9lbHNlX3N0bXQgPSBnaW1wbGVfYnVpbGRfY29uZCAoR1RfRVhQ UiwgYW5kX2V4cHJfdmFyLAorCSAgCQkgICAgICAgICAgICBpbnRlZ2VyX3pl cm9fbm9kZSwKKwkJCQkgICAgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICBn aW1wbGVfc2V0X2Jsb2NrIChpZl9lbHNlX3N0bXQsIERFQ0xfSU5JVElBTCAo ZnVuY3Rpb25fZGVjbCkpOworICBnaW1wbGVfc2V0X2JiIChpZl9lbHNlX3N0 bXQsIG5ld19iYik7CisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBp Zl9lbHNlX3N0bXQpOworCisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2Vx LCBjb252ZXJ0X3N0bXQpOworICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3Nl cSwgcmV0dXJuX3N0bXQpOworICBzZXRfYmJfc2VxIChuZXdfYmIsIGdzZXEp OworCisgIGJiMSA9IG5ld19iYjsKKyAgZTEyID0gc3BsaXRfYmxvY2sgKGJi MSwgaWZfZWxzZV9zdG10KTsKKyAgYmIyID0gZTEyLT5kZXN0OworICBlMTIt PmZsYWdzICY9IH5FREdFX0ZBTExUSFJVOworICBlMTItPmZsYWdzIHw9IEVE R0VfVFJVRV9WQUxVRTsKKworICBlMjMgPSBzcGxpdF9ibG9jayAoYmIyLCBy ZXR1cm5fc3RtdCk7CisKKyAgZ2ltcGxlX3NldF9iYiAoY29udmVydF9zdG10 LCBiYjIpOworICBnaW1wbGVfc2V0X2JiIChyZXR1cm5fc3RtdCwgYmIyKTsK KworICBiYjMgPSBlMjMtPmRlc3Q7CisgIG1ha2VfZWRnZSAoYmIxLCBiYjMs IEVER0VfRkFMU0VfVkFMVUUpOyAKKworICByZW1vdmVfZWRnZSAoZTIzKTsK KyAgbWFrZV9lZGdlIChiYjIsIEVYSVRfQkxPQ0tfUFRSLCAwKTsKKworICBw b3BfY2Z1biAoKTsKKyAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0gb2xkX2N1 cnJlbnRfZnVuY3Rpb25fZGVjbDsKKworICByZXR1cm4gYmIzOworfQorCisv KiBUaGlzIHBhcnNlcyB0aGUgYXR0cmlidXRlIGFyZ3VtZW50cyB0byB0YXJn ZXQgaW4gREVDTCBhbmQgZGV0ZXJtaW5lcworICAgdGhlIHJpZ2h0IGJ1aWx0 aW4gdG8gdXNlIHRvIG1hdGNoIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY2F0aW9u LgorICAgRm9yIG5vdywgb25seSBvbmUgdGFyZ2V0IGFyZ3VtZW50ICgiYXJj aD0iIG9yICI8LW0+eHh4IikgaXMgYWxsb3dlZC4KKyAgIEl0IHJldHVybnMg dGhlIHByaW9yaXR5IHZhbHVlIGZvciB0aGlzIHZlcnNpb24gZGVjbC4gIElm IFBSRURJQ0FURV9MSVNUCisgICBpcyBub3QgTlVMTCwgaXQgc3RvcmVzIHRo ZSBsaXN0IG9mIGNwdSBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgY2hlY2tl ZAorICAgYmVmb3JlIGRpc3BhdGNoaW5nIHRoaXMgZnVuY3Rpb24uICAqLwor CitzdGF0aWMgdW5zaWduZWQgaW50CitnZXRfYnVpbHRpbl9jb2RlX2Zvcl92 ZXJzaW9uICh0cmVlIGRlY2wsIHRyZWUgKnByZWRpY2F0ZV9saXN0KQorewor ICB0cmVlIGF0dHJzOworICBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiBjdXJf dGFyZ2V0OworICB0cmVlIHRhcmdldF9ub2RlOworICBzdHJ1Y3QgY2xfdGFy Z2V0X29wdGlvbiAqbmV3X3RhcmdldDsKKyAgY29uc3QgY2hhciAqYXJnX3N0 ciA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmF0dHJzX3N0ciA9IE5VTEw7Cisg IGNoYXIgKnRva19zdHIgPSBOVUxMOworICBjaGFyICp0b2tlbjsKKyAgdW5z aWduZWQgaW50IHByaW9yaXR5ID0gMDsKKworICAvKiBQcmlvcml0eSBvZiBp Mzg2IGZlYXR1cmVzLCBncmVhdGVyIHZhbHVlIGlzIGhpZ2hlciBwcmlvcml0 eS4gICBUaGlzIGlzCisgICAgIHVzZWQgdG8gZGVjaWRlIHRoZSBvcmRlciBp biB3aGljaCBmdW5jdGlvbiBkaXNwYXRjaCBtdXN0IGhhcHBlbi4gIEZvcgor ICAgICBpbnN0YW5jZSwgYSB2ZXJzaW9uIHNwZWNpYWxpemVkIGZvciBTU0U0 LjIgc2hvdWxkIGJlIGNoZWNrZWQgZm9yIGRpc3BhdGNoCisgICAgIGJlZm9y ZSBhIHZlcnNpb24gZm9yIFNTRTMsIGFzIFNTRTQuMiBpbXBsaWVzIFNTRTMu ICAqLworICBlbnVtIGZlYXR1cmVfcHJpb3JpdHkKKyAgeworICAgIFBfWkVS TyA9IDAsCisgICAgUF9NTVgsCisgICAgUF9TU0UsCisgICAgUF9TU0UyLAor ICAgIFBfU1NFMywKKyAgICBQX1NTU0UzLAorICAgIFBfUFJPQ19TU1NFMywK KyAgICBQX1NTRTRfYSwKKyAgICBQX1BST0NfU1NFNF9hLAorICAgIFBfU1NF NF8xLAorICAgIFBfU1NFNF8yLAorICAgIFBfUFJPQ19TU0U0XzIsCisgICAg UF9QT1BDTlQsCisgICAgUF9BVlgsCisgICAgUF9BVlgyLAorICAgIFBfRk1B LAorICAgIFBfUFJPQ19GTUEKKyAgfTsKKworICAvKiBUaGVzZSBhcmUgdGhl IHRhcmdldCBhdHRyaWJ1dGUgc3RyaW5ncyBmb3Igd2hpY2ggYSBkaXNwYXRj aGVyIGlzCisgICAgIGF2YWlsYWJsZSwgZnJvbSBmb2xkX2J1aWx0aW5fY3B1 LiAgKi8KKworICBzdGF0aWMgc3RydWN0IF9mZWF0dXJlX2xpc3QKKyAgICB7 CisgICAgICBjb25zdCBjaGFyICpjb25zdCBuYW1lOworICAgICAgY29uc3Qg ZW51bSBmZWF0dXJlX3ByaW9yaXR5IHByaW9yaXR5OworICAgIH0KKyAgY29u c3QgZmVhdHVyZV9saXN0W10gPQorICAgIHsKKyAgICAgIHsibW14IiwgUF9N TVh9LAorICAgICAgeyJzc2UiLCBQX1NTRX0sCisgICAgICB7InNzZTIiLCBQ X1NTRTJ9LAorICAgICAgeyJzc2UzIiwgUF9TU0UzfSwKKyAgICAgIHsic3Nz ZTMiLCBQX1NTU0UzfSwKKyAgICAgIHsic3NlNC4xIiwgUF9TU0U0XzF9LAor ICAgICAgeyJzc2U0LjIiLCBQX1NTRTRfMn0sCisgICAgICB7InBvcGNudCIs IFBfUE9QQ05UfSwKKyAgICAgIHsiYXZ4IiwgUF9BVlh9LAorICAgICAgeyJh dngyIiwgUF9BVlgyfQorICAgIH07CisKKworICBzdGF0aWMgdW5zaWduZWQg aW50IE5VTV9GRUFUVVJFUworICAgID0gc2l6ZW9mIChmZWF0dXJlX2xpc3Qp IC8gc2l6ZW9mIChzdHJ1Y3QgX2ZlYXR1cmVfbGlzdCk7CisKKyAgdW5zaWdu ZWQgaW50IGk7CisKKyAgdHJlZSBwcmVkaWNhdGVfY2hhaW4gPSBOVUxMX1RS RUU7CisgIHRyZWUgcHJlZGljYXRlX2RlY2wsIHByZWRpY2F0ZV9hcmc7CisK KyAgYXR0cnMgPSBsb29rdXBfYXR0cmlidXRlICgidGFyZ2V0IiwgREVDTF9B VFRSSUJVVEVTIChkZWNsKSk7CisgIGdjY19hc3NlcnQgKGF0dHJzICE9IE5V TEwpOworCisgIGF0dHJzID0gVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAoYXR0 cnMpKTsKKworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGF0dHJzKSA9PSBT VFJJTkdfQ1NUKTsKKyAgYXR0cnNfc3RyID0gVFJFRV9TVFJJTkdfUE9JTlRF UiAoYXR0cnMpOworCisKKyAgLyogSGFuZGxlIGFyY2g9IGlmIHNwZWNpZmll ZC4gIEZvciBwcmlvcml0eSwgc2V0IGl0IHRvIGJlIDEgbW9yZSB0aGFuCisg ICAgIHRoZSBiZXN0IGluc3RydWN0aW9uIHNldCB0aGUgcHJvY2Vzc29yIGNh biBoYW5kbGUuICBGb3IgaW5zdGFuY2UsIGlmCisgICAgIHRoZXJlIGlzIGEg dmVyc2lvbiBmb3IgYXRvbSBhbmQgYSB2ZXJzaW9uIGZvciBzc3NlMyAodGhl IGhpZ2hlc3QgSVNBCisgICAgIHByaW9yaXR5IGZvciBhdG9tKSwgdGhlIGF0 b20gdmVyc2lvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIGRpc3BhdGNoCisgICAg IGJlZm9yZSB0aGUgc3NzZTMgdmVyc2lvbi4gKi8KKyAgaWYgKHN0cnN0ciAo YXR0cnNfc3RyLCAiYXJjaD0iKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNs X3RhcmdldF9vcHRpb25fc2F2ZSAoJmN1cl90YXJnZXQsICZnbG9iYWxfb3B0 aW9ucyk7CisgICAgICB0YXJnZXRfbm9kZSA9IGl4ODZfdmFsaWRfdGFyZ2V0 X2F0dHJpYnV0ZV90cmVlIChhdHRycyk7CisgICAgCisgICAgICBnY2NfYXNz ZXJ0ICh0YXJnZXRfbm9kZSk7CisgICAgICBuZXdfdGFyZ2V0ID0gVFJFRV9U QVJHRVRfT1BUSU9OICh0YXJnZXRfbm9kZSk7CisgICAgICBnY2NfYXNzZXJ0 IChuZXdfdGFyZ2V0KTsKKyAgICAgIAorICAgICAgaWYgKG5ld190YXJnZXQt PmFyY2hfc3BlY2lmaWVkICYmIG5ld190YXJnZXQtPmFyY2ggPiAwKQorCXsK KwkgIHN3aXRjaCAobmV3X3RhcmdldC0+YXJjaCkKKwkgICAgeworCSAgICBj YXNlIFBST0NFU1NPUl9DT1JFMl8zMjoKKwkgICAgY2FzZSBQUk9DRVNTT1Jf Q09SRTJfNjQ6CisJICAgICAgYXJnX3N0ciA9ICJjb3JlMiI7CisJICAgICAg cHJpb3JpdHkgPSBQX1BST0NfU1NTRTM7CisJICAgICAgYnJlYWs7CisJICAg IGNhc2UgUFJPQ0VTU09SX0NPUkVJN18zMjoKKwkgICAgY2FzZSBQUk9DRVNT T1JfQ09SRUk3XzY0OgorCSAgICAgIGFyZ19zdHIgPSAiY29yZWk3IjsKKwkg ICAgICBwcmlvcml0eSA9IFBfUFJPQ19TU0U0XzI7CisJICAgICAgYnJlYWs7 CisJICAgIGNhc2UgUFJPQ0VTU09SX0FUT006CisJICAgICAgYXJnX3N0ciA9 ICJhdG9tIjsKKwkgICAgICBwcmlvcml0eSA9IFBfUFJPQ19TU1NFMzsKKwkg ICAgICBicmVhazsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQU1ERkFNMTA6CisJ ICAgICAgYXJnX3N0ciA9ICJhbWRmYW0xMGgiOworCSAgICAgIHByaW9yaXR5 ID0gUF9QUk9DX1NTRTRfYTsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBQ Uk9DRVNTT1JfQkRWRVIxOgorCSAgICAgIGFyZ19zdHIgPSAiYmR2ZXIxIjsK KwkgICAgICBwcmlvcml0eSA9IFBfUFJPQ19GTUE7CisJICAgICAgYnJlYWs7 CisJICAgIGNhc2UgUFJPQ0VTU09SX0JEVkVSMjoKKwkgICAgICBhcmdfc3Ry ID0gImJkdmVyMiI7CisJICAgICAgcHJpb3JpdHkgPSBQX1BST0NfRk1BOwor CSAgICAgIGJyZWFrOworCSAgICB9ICAKKwl9ICAgIAorICAgIAorICAgICAg Y2xfdGFyZ2V0X29wdGlvbl9yZXN0b3JlICgmZ2xvYmFsX29wdGlvbnMsICZj dXJfdGFyZ2V0KTsKKwkKKyAgICAgIGlmIChwcmVkaWNhdGVfbGlzdCAmJiBh cmdfc3RyID09IE5VTEwpCisJeworCSAgZXJyb3JfYXQgKERFQ0xfU09VUkNF X0xPQ0FUSU9OIChkZWNsKSwKKwkgICAgCSJObyBkaXNwYXRjaGVyIGZvdW5k IGZvciB0aGUgdmVyc2lvbmluZyBhdHRyaWJ1dGVzIik7CisJICByZXR1cm4g MDsKKwl9CisgICAgCisgICAgICBpZiAocHJlZGljYXRlX2xpc3QpCisJewor ICAgICAgICAgIHByZWRpY2F0ZV9kZWNsID0gaXg4Nl9idWlsdGlucyBbKGlu dCkgSVg4Nl9CVUlMVElOX0NQVV9JU107CisgICAgICAgICAgLyogRm9yIGEg QyBzdHJpbmcgbGl0ZXJhbCB0aGUgbGVuZ3RoIGluY2x1ZGVzIHRoZSB0cmFp bGluZyBOVUxMLiAgKi8KKyAgICAgICAgICBwcmVkaWNhdGVfYXJnID0gYnVp bGRfc3RyaW5nX2xpdGVyYWwgKHN0cmxlbiAoYXJnX3N0cikgKyAxLCBhcmdf c3RyKTsKKyAgICAgICAgICBwcmVkaWNhdGVfY2hhaW4gPSB0cmVlX2NvbnMg KHByZWRpY2F0ZV9kZWNsLCBwcmVkaWNhdGVfYXJnLAorCQkJCSAgICAgICBw cmVkaWNhdGVfY2hhaW4pOworCX0KKyAgICB9CisKKyAgLyogUHJvY2VzcyBm ZWF0dXJlIG5hbWUuICAqLworICB0b2tfc3RyID0gIChjaGFyICopIHhtYWxs b2MgKHN0cmxlbiAoYXR0cnNfc3RyKSArIDEpOworICBzdHJjcHkgKHRva19z dHIsIGF0dHJzX3N0cik7CisgIHRva2VuID0gc3RydG9rICh0b2tfc3RyLCAi LCIpOworICBwcmVkaWNhdGVfZGVjbCA9IGl4ODZfYnVpbHRpbnMgWyhpbnQp IElYODZfQlVJTFRJTl9DUFVfU1VQUE9SVFNdOworCisgIHdoaWxlICh0b2tl biAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIERvIG5vdCBwcm9jZXNzICJh cmNoPSIgICovCisgICAgICBpZiAoc3RybmNtcCAodG9rZW4sICJhcmNoPSIs IDUpID09IDApCisJeworCSAgdG9rZW4gPSBzdHJ0b2sgKE5VTEwsICIsIik7 CisJICBjb250aW51ZTsKKwl9CisgICAgICBmb3IgKGkgPSAwOyBpIDwgTlVN X0ZFQVRVUkVTOyArK2kpCisJeworCSAgaWYgKHN0cmNtcCAodG9rZW4sIGZl YXR1cmVfbGlzdFtpXS5uYW1lKSA9PSAwKQorCSAgICB7CisJICAgICAgaWYg KHByZWRpY2F0ZV9saXN0KQorCQl7CisJCSAgcHJlZGljYXRlX2FyZyA9IGJ1 aWxkX3N0cmluZ19saXRlcmFsICgKKwkJCQkgIHN0cmxlbiAoZmVhdHVyZV9s aXN0W2ldLm5hbWUpICsgMSwKKwkJCQkgIGZlYXR1cmVfbGlzdFtpXS5uYW1l KTsKKwkJICBwcmVkaWNhdGVfY2hhaW4gPSB0cmVlX2NvbnMgKHByZWRpY2F0 ZV9kZWNsLCBwcmVkaWNhdGVfYXJnLAorCQkJCQkgICAgICAgcHJlZGljYXRl X2NoYWluKTsKKwkJfQorCSAgICAgIC8qIEZpbmQgdGhlIG1heGltdW0gcHJp b3JpdHkgZmVhdHVyZS4gICovCisJICAgICAgaWYgKGZlYXR1cmVfbGlzdFtp XS5wcmlvcml0eSA+IHByaW9yaXR5KQorCQlwcmlvcml0eSA9IGZlYXR1cmVf bGlzdFtpXS5wcmlvcml0eTsKKworCSAgICAgIGJyZWFrOworCSAgICB9CisJ fQorICAgICAgaWYgKHByZWRpY2F0ZV9saXN0ICYmIGkgPT0gTlVNX0ZFQVRV UkVTKQorCXsKKwkgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAo ZGVjbCksCisJCSAgICAiTm8gZGlzcGF0Y2hlciBmb3VuZCBmb3IgJXMiLCB0 b2tlbik7CisJICByZXR1cm4gMDsKKwl9CisgICAgICB0b2tlbiA9IHN0cnRv ayAoTlVMTCwgIiwiKTsKKyAgICB9CisgIGZyZWUgKHRva19zdHIpOworCisg IGlmIChwcmVkaWNhdGVfbGlzdCAmJiBwcmVkaWNhdGVfY2hhaW4gPT0gTlVM TF9UUkVFKQorICAgIHsKKyAgICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9M T0NBVElPTiAoZGVjbCksCisJICAgICAgICAiTm8gZGlzcGF0Y2hlciBmb3Vu ZCBmb3IgdGhlIHZlcnNpb25pbmcgYXR0cmlidXRlcyA6ICVzIiwKKwkgICAg ICAgIGF0dHJzX3N0cik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVs c2UgaWYgKHByZWRpY2F0ZV9saXN0KQorICAgIHsKKyAgICAgIHByZWRpY2F0 ZV9jaGFpbiA9IG5yZXZlcnNlIChwcmVkaWNhdGVfY2hhaW4pOworICAgICAg KnByZWRpY2F0ZV9saXN0ID0gcHJlZGljYXRlX2NoYWluOworICAgIH0KKwor ICByZXR1cm4gcHJpb3JpdHk7IAorfQorCisvKiBUaGlzIGNvbXBhcmVzIHRo ZSBwcmlvcml0eSBvZiB0YXJnZXQgZmVhdHVyZXMgaW4gZnVuY3Rpb24gREVD TDEKKyAgIGFuZCBERUNMMi4gIEl0IHJldHVybnMgcG9zaXRpdmUgdmFsdWUg aWYgREVDTDEgaXMgaGlnaGVyIHByaW9yaXR5LAorICAgbmVnYXRpdmUgdmFs dWUgaWYgREVDTDIgaXMgaGlnaGVyIHByaW9yaXR5IGFuZCAwIGlmIHRoZXkg YXJlIHRoZQorICAgc2FtZS4gICovCisKK3N0YXRpYyBpbnQKK2l4ODZfY29t cGFyZV92ZXJzaW9uX3ByaW9yaXR5ICh0cmVlIGRlY2wxLCB0cmVlIGRlY2wy KQoreworICB1bnNpZ25lZCBpbnQgcHJpb3JpdHkxID0gMDsKKyAgdW5zaWdu ZWQgaW50IHByaW9yaXR5MiA9IDA7CisKKyAgaWYgKGxvb2t1cF9hdHRyaWJ1 dGUgKCJ0YXJnZXQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wxKSkgIT0gTlVM TCkKKyAgICBwcmlvcml0eTEgPSBnZXRfYnVpbHRpbl9jb2RlX2Zvcl92ZXJz aW9uIChkZWNsMSwgTlVMTCk7CisKKyAgaWYgKGxvb2t1cF9hdHRyaWJ1dGUg KCJ0YXJnZXQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wyKSkgIT0gTlVMTCkK KyAgICBwcmlvcml0eTIgPSBnZXRfYnVpbHRpbl9jb2RlX2Zvcl92ZXJzaW9u IChkZWNsMiwgTlVMTCk7CisKKyAgcmV0dXJuIChpbnQpcHJpb3JpdHkxIC0g KGludClwcmlvcml0eTI7Cit9CisKKy8qIFYxIGFuZCBWMiBwb2ludCB0byBm dW5jdGlvbiB2ZXJzaW9ucyB3aXRoIGRpZmZlcmVudCBwcmlvcml0aWVzCisg ICBiYXNlZCBvbiB0aGUgdGFyZ2V0IElTQS4gIFRoaXMgZnVuY3Rpb24gY29t cGFyZXMgdGhlaXIgcHJpb3JpdGllcy4gICovCisgCitzdGF0aWMgaW50Citm ZWF0dXJlX2NvbXBhcmUgKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2 MikKK3sKKyAgdHlwZWRlZiBzdHJ1Y3QgX2Z1bmN0aW9uX3ZlcnNpb25faW5m bworICAgIHsKKyAgICAgIHRyZWUgdmVyc2lvbl9kZWNsOworICAgICAgdHJl ZSBwcmVkaWNhdGVfY2hhaW47CisgICAgICB1bnNpZ25lZCBpbnQgZGlzcGF0 Y2hfcHJpb3JpdHk7CisgICAgfSBmdW5jdGlvbl92ZXJzaW9uX2luZm87CisK KyAgY29uc3QgZnVuY3Rpb25fdmVyc2lvbl9pbmZvIGMxID0gKihjb25zdCBm dW5jdGlvbl92ZXJzaW9uX2luZm8gKil2MTsKKyAgY29uc3QgZnVuY3Rpb25f dmVyc2lvbl9pbmZvIGMyID0gKihjb25zdCBmdW5jdGlvbl92ZXJzaW9uX2lu Zm8gKil2MjsKKyAgcmV0dXJuIChjMi5kaXNwYXRjaF9wcmlvcml0eSAtIGMx LmRpc3BhdGNoX3ByaW9yaXR5KTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBn ZW5lcmF0ZXMgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGZvcgorICAgbXVsdGkt dmVyc2lvbmVkIGZ1bmN0aW9ucy4gIERJU1BBVENIX0RFQ0wgaXMgdGhlIGZ1 bmN0aW9uIHdoaWNoIHdpbGwKKyAgIGNvbnRhaW4gdGhlIGRpc3BhdGNoIGxv Z2ljLiAgRk5ERUNMUyBhcmUgdGhlIGZ1bmN0aW9uIGNob2ljZXMgZm9yCisg ICBkaXNwYXRjaCwgYW5kIGlzIGEgdHJlZSBjaGFpbi4gIEVNUFRZX0JCIGlz IHRoZSBiYXNpYyBibG9jayBwb2ludGVyCisgICBpbiBESVNQQVRDSF9ERUNM IGluIHdoaWNoIHRoZSBkaXNwYXRjaCBjb2RlIGlzIGdlbmVyYXRlZC4gICov CisKK3N0YXRpYyBpbnQKK2Rpc3BhdGNoX2Z1bmN0aW9uX3ZlcnNpb25zICh0 cmVlIGRpc3BhdGNoX2RlY2wsCisJCQkgICAgdm9pZCAqZm5kZWNsc19wLAor CQkJICAgIGJhc2ljX2Jsb2NrICplbXB0eV9iYikKK3sKKyAgdHJlZSBkZWZh dWx0X2RlY2w7CisgIGdpbXBsZSBpZnVuY19jcHVfaW5pdF9zdG10OworICBn aW1wbGVfc2VxIGdzZXE7CisgIHRyZWUgb2xkX2N1cnJlbnRfZnVuY3Rpb25f ZGVjbDsKKyAgaW50IGl4OworICB0cmVlIGVsZTsKKyAgVkVDICh0cmVlLCBo ZWFwKSAqZm5kZWNsczsKKyAgdW5zaWduZWQgaW50IG51bV92ZXJzaW9ucyA9 IDA7CisgIHVuc2lnbmVkIGludCBhY3R1YWxfdmVyc2lvbnMgPSAwOworICB1 bnNpZ25lZCBpbnQgaTsKKworICBzdHJ1Y3QgX2Z1bmN0aW9uX3ZlcnNpb25f aW5mbworICAgIHsKKyAgICAgIHRyZWUgdmVyc2lvbl9kZWNsOworICAgICAg dHJlZSBwcmVkaWNhdGVfY2hhaW47CisgICAgICB1bnNpZ25lZCBpbnQgZGlz cGF0Y2hfcHJpb3JpdHk7CisgICAgfSpmdW5jdGlvbl92ZXJzaW9uX2luZm87 CisKKyAgZ2NjX2Fzc2VydCAoZGlzcGF0Y2hfZGVjbCAhPSBOVUxMCisJICAg ICAgJiYgZm5kZWNsc19wICE9IE5VTEwKKwkgICAgICAmJiBlbXB0eV9iYiAh PSBOVUxMKTsKKworICAvKmZuZGVjbHNfcCBpcyBhY3R1YWxseSBhIHZlY3Rv ci4gICovCisgIGZuZGVjbHMgPSAoVkVDICh0cmVlLCBoZWFwKSAqKWZuZGVj bHNfcDsKKworICAvKiBBdGxlYXN0IG9uZSBtb3JlIHZlcnNpb24gb3RoZXIg dGhhbiB0aGUgZGVmYXVsdC4gICovCisgIG51bV92ZXJzaW9ucyA9IFZFQ19s ZW5ndGggKHRyZWUsIGZuZGVjbHMpOworICBnY2NfYXNzZXJ0IChudW1fdmVy c2lvbnMgPj0gMik7CisKKyAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvID0gKHN0 cnVjdCBfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopCisgICAgeG1hbGxvYyAo KG51bV92ZXJzaW9ucyAtIDEpICogc2l6ZW9mIChzdHJ1Y3QgX2Z1bmN0aW9u X3ZlcnNpb25faW5mbykpOworCisgIC8qIFRoZSBmaXJzdCB2ZXJzaW9uIGlu IHRoZSB2ZWN0b3IgaXMgdGhlIGRlZmF1bHQgZGVjbC4gICovCisgIGRlZmF1 bHRfZGVjbCA9IFZFQ19pbmRleCAodHJlZSwgZm5kZWNscywgMCk7CisKKyAg b2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJlbnRfZnVuY3Rpb25f ZGVjbDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9GVU5DVElPTiAoZGlz cGF0Y2hfZGVjbCkpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBkaXNw YXRjaF9kZWNsOworCisgIGdzZXEgPSBiYl9zZXEgKCplbXB0eV9iYik7Cisg IC8qIEZ1bmN0aW9uIHZlcnNpb24gZGlzcGF0Y2ggaXMgdmlhIElGVU5DLiAg SUZVTkMgcmVzb2x2ZXJzIGZpcmUgYmVmb3JlCisgICAgIGNvbnN0cnVjdG9y cywgc28gZXhwbGljaXR5IGNhbGwgX19idWlsdGluX2NwdV9pbml0IGhlcmUu ICAqLworICBpZnVuY19jcHVfaW5pdF9zdG10ID0gZ2ltcGxlX2J1aWxkX2Nh bGxfdmVjICgKKyAgICAgICAgICAgICAgICAgICAgIGl4ODZfYnVpbHRpbnMg WyhpbnQpIElYODZfQlVJTFRJTl9DUFVfSU5JVF0sIE5VTEwpOworICBnaW1w bGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgaWZ1bmNfY3B1X2luaXRfc3RtdCk7 CisgIGdpbXBsZV9zZXRfYmIgKGlmdW5jX2NwdV9pbml0X3N0bXQsICplbXB0 eV9iYik7CisgIHNldF9iYl9zZXEgKCplbXB0eV9iYiwgZ3NlcSk7CisKKyAg cG9wX2NmdW4gKCk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IG9sZF9j dXJyZW50X2Z1bmN0aW9uX2RlY2w7CisKKworICBmb3IgKGl4ID0gMTsgVkVD X2l0ZXJhdGUgKHRyZWUsIGZuZGVjbHMsIGl4LCBlbGUpOyArK2l4KQorICAg IHsKKyAgICAgIHRyZWUgdmVyc2lvbl9kZWNsID0gZWxlOworICAgICAgdHJl ZSBwcmVkaWNhdGVfY2hhaW4gPSBOVUxMX1RSRUU7CisgICAgICB1bnNpZ25l ZCBpbnQgcHJpb3JpdHk7CisgICAgICAvKiBHZXQgYXR0cmlidXRlIHN0cmlu ZywgcGFyc2UgaXQgYW5kIGZpbmQgdGhlIHJpZ2h0IHByZWRpY2F0ZSBkZWNs LgorICAgICAgICAgVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBjb3VsZCBiZSBh IGxlbmd0aHkgY29tYmluYXRpb24gb2YgbWFueQorCSBmZWF0dXJlcywgbGlr ZSBhcmNoLXR5cGUgYW5kIHZhcmlvdXMgaXNhLXZhcmlhbnRzLiAgKi8KKyAg ICAgIHByaW9yaXR5ID0gZ2V0X2J1aWx0aW5fY29kZV9mb3JfdmVyc2lvbiAo dmVyc2lvbl9kZWNsLAorCSAJCQkgICAgICAgICAgICAgICAmcHJlZGljYXRl X2NoYWluKTsKKworICAgICAgaWYgKHByZWRpY2F0ZV9jaGFpbiA9PSBOVUxM X1RSRUUpCisJY29udGludWU7CisKKyAgICAgIGFjdHVhbF92ZXJzaW9ucysr OworICAgICAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvIFtpeCAtIDFdLnZlcnNp b25fZGVjbCA9IHZlcnNpb25fZGVjbDsKKyAgICAgIGZ1bmN0aW9uX3ZlcnNp b25faW5mbyBbaXggLSAxXS5wcmVkaWNhdGVfY2hhaW4gPSBwcmVkaWNhdGVf Y2hhaW47CisgICAgICBmdW5jdGlvbl92ZXJzaW9uX2luZm8gW2l4IC0gMV0u ZGlzcGF0Y2hfcHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICB9CisKKyAgLyog U29ydCB0aGUgdmVyc2lvbnMgYWNjb3JkaW5nIHRvIGRlc2NlbmRpbmcgb3Jk ZXIgb2YgZGlzcGF0Y2ggcHJpb3JpdHkuICBUaGUKKyAgICAgcHJpb3JpdHkg aXMgYmFzZWQgb24gdGhlIElTQS4gIFRoaXMgaXMgbm90IGEgcGVyZmVjdCBz b2x1dGlvbi4gIFRoZXJlCisgICAgIGNvdWxkIHN0aWxsIGJlIGFtYmlndWl0 eS4gIElmIG1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gdmVyc2lvbiBpcyBzdWl0 YWJsZQorICAgICB0byBleGVjdXRlLCAgd2hpY2ggb25lIHNob3VsZCBiZSBk aXNwYXRjaGVkPyAgSW4gZnV0dXJlLCBhbGxvdyB0aGUgdXNlcgorICAgICB0 byBzcGVjaWZ5IGEgZGlzcGF0Y2ggIHByaW9yaXR5IG5leHQgdG8gdGhlIHZl cnNpb24uICAqLworICBxc29ydCAoZnVuY3Rpb25fdmVyc2lvbl9pbmZvLCBh Y3R1YWxfdmVyc2lvbnMsCisgICAgICAgICBzaXplb2YgKHN0cnVjdCBfZnVu Y3Rpb25fdmVyc2lvbl9pbmZvKSwgZmVhdHVyZV9jb21wYXJlKTsKKworICBm b3IgIChpID0gMDsgaSA8IGFjdHVhbF92ZXJzaW9uczsgKytpKQorICAgICpl bXB0eV9iYiA9IGFkZF9jb25kaXRpb25fdG9fYmIgKGRpc3BhdGNoX2RlY2ws CisJCQkJICAgICBmdW5jdGlvbl92ZXJzaW9uX2luZm9baV0udmVyc2lvbl9k ZWNsLAorCQkJCSAgICAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvW2ldLnByZWRp Y2F0ZV9jaGFpbiwKKwkJCQkgICAgICplbXB0eV9iYik7CisKKyAgLyogZGlz cGF0Y2ggZGVmYXVsdCB2ZXJzaW9uIGF0IHRoZSBlbmQuICAqLworICAqZW1w dHlfYmIgPSBhZGRfY29uZGl0aW9uX3RvX2JiIChkaXNwYXRjaF9kZWNsLCBk ZWZhdWx0X2RlY2wsCisJCQkJICAgTlVMTCwgKmVtcHR5X2JiKTsKKworICBm cmVlIChmdW5jdGlvbl92ZXJzaW9uX2luZm8pOworICByZXR1cm4gMDsKK30K KworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgZm4xIGFuZCBm bjIgYXJlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uLgorICAgUmV0 dXJucyBmYWxzZSBpZiBvbmx5IG9uZSBvZiB0aGUgZnVuY3Rpb24gZGVjbHMg aGFzIHRoZSB0YXJnZXQgYXR0cmlidXRlCisgICBzZXQgb3IgaWYgdGhlIHRh cmdldHMgb2YgdGhlIGZ1bmN0aW9uIGRlY2xzIGFyZSBkaWZmZXJlbnQuICBU aGlzIGFzc3VtZXMKKyAgIHRoZSBmbjEgYW5kIGZuMiBoYXZlIHRoZSBzYW1l IHNpZ25hdHVyZS4gICovCisKK3N0YXRpYyBib29sCitpeDg2X2Z1bmN0aW9u X3ZlcnNpb25zICh0cmVlIGZuMSwgdHJlZSBmbjIpCit7CisgIHRyZWUgYXR0 cjEsIGF0dHIyOworICBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiAqdGFyZ2V0 MSwgKnRhcmdldDI7CisKKyAgaWYgKFRSRUVfQ09ERSAoZm4xKSAhPSBGVU5D VElPTl9ERUNMCisgICAgICB8fCBUUkVFX0NPREUgKGZuMikgIT0gRlVOQ1RJ T05fREVDTCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgYXR0cjEgPSBERUNM X0ZVTkNUSU9OX1NQRUNJRklDX1RBUkdFVCAoZm4xKTsKKyAgYXR0cjIgPSBE RUNMX0ZVTkNUSU9OX1NQRUNJRklDX1RBUkdFVCAoZm4yKTsKKworICBpZiAo YXR0cjEgPT0gTlVMTF9UUkVFICYmIGF0dHIyID09IE5VTExfVFJFRSkKKyAg ICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKChhdHRyMSA9PSBOVUxMX1RSRUUg JiYgYXR0cjIgIT0gTlVMTF9UUkVFKQorICAgICAgfHwgKGF0dHIxICE9IE5V TExfVFJFRSAmJiBhdHRyMiA9PSBOVUxMX1RSRUUpKQorICAgIHJldHVybiB0 cnVlOworCisgIHRhcmdldDEgPSBUUkVFX1RBUkdFVF9PUFRJT04gKGF0dHIx KTsKKyAgdGFyZ2V0MiA9IFRSRUVfVEFSR0VUX09QVElPTiAoYXR0cjIpOwor CisgIGlmICh0YXJnZXQxLT54X2l4ODZfaXNhX2ZsYWdzID09IHRhcmdldDIt PnhfaXg4Nl9pc2FfZmxhZ3MKKyAgICAgICYmIHRhcmdldDEtPnhfdGFyZ2V0 X2ZsYWdzID09IHRhcmdldDItPnhfdGFyZ2V0X2ZsYWdzCisgICAgICAmJiB0 YXJnZXQxLT5hcmNoID09IHRhcmdldDItPmFyY2gKKyAgICAgICYmIHRhcmdl dDEtPnR1bmUgPT0gdGFyZ2V0Mi0+dHVuZQorICAgICAgJiYgdGFyZ2V0MS0+ eF9peDg2X2ZwbWF0aCA9PSB0YXJnZXQyLT54X2l4ODZfZnBtYXRoCisgICAg ICAmJiB0YXJnZXQxLT5icmFuY2hfY29zdCA9PSB0YXJnZXQyLT5icmFuY2hf Y29zdCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIHRydWU7Cit9 CisKKy8qIENvbXBhcmF0b3IgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbiBxc29y dCByb3V0aW5lIHRvIHNvcnQgYXR0cmlidXRlCisgICBzcGVjaWZpY2F0aW9u IHN0cmluZ3MgdG8gInRhcmdldCIuICAqLworCitzdGF0aWMgaW50CithdHRy X3N0cmNtcCAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQorewor ICBjb25zdCBjaGFyICpjMSA9ICooY2hhciAqY29uc3QqKXYxOworICBjb25z dCBjaGFyICpjMiA9ICooY2hhciAqY29uc3QqKXYyOworICByZXR1cm4gc3Ry Y21wIChjMSwgYzIpOworfQorCisvKiBTVFIgaXMgdGhlIGFyZ3VtZW50IHRv IHRhcmdldCBhdHRyaWJ1dGUuICBUaGlzIGZ1bmN0aW9uIHRva2VuaXplcwor ICAgdGhlIGNvbW1hIHNlcGFyYXRlZCBhcmd1bWVudHMsIHNvcnRzIHRoZW0g YW5kIHJldHVybnMgYSBzdHJpbmcgd2hpY2gKKyAgIGlzIGEgdW5pcXVlIGlk ZW50aWZpZXIgZm9yIHRoZSBjb21tYSBzZXBhcmF0ZWQgYXJndW1lbnRzLiAg Ki8KKworc3RhdGljIGNoYXIgKgorc29ydGVkX2F0dHJfc3RyaW5nIChjb25z dCBjaGFyICpzdHIpCit7CisgIGNoYXIgKiphcmdzID0gTlVMTDsKKyAgY2hh ciAqYXR0cl9zdHIsICpyZXRfc3RyOworICBjaGFyICphdHRyID0gTlVMTDsK KyAgdW5zaWduZWQgaW50IGFyZ251bSA9IDE7CisgIHVuc2lnbmVkIGludCBp OworCisgIGZvciAoaSA9IDA7IGkgPCBzdHJsZW4gKHN0cik7IGkrKykKKyAg ICBpZiAoc3RyW2ldID09ICcsJykKKyAgICAgIGFyZ251bSsrOworCisgIGF0 dHJfc3RyID0gKGNoYXIgKil4bWFsbG9jIChzdHJsZW4gKHN0cikgKyAxKTsK KyAgc3RyY3B5IChhdHRyX3N0ciwgc3RyKTsKKworICBmb3IgKGkgPSAwOyBp IDwgc3RybGVuIChhdHRyX3N0cik7IGkrKykKKyAgICBpZiAoYXR0cl9zdHJb aV0gPT0gJz0nIHx8IGF0dHJfc3RyW2ldPT0gJy0nKQorICAgICAgYXR0cl9z dHJbaV0gPSAnXyc7CisKKyAgaWYgKGFyZ251bSA9PSAxKQorICAgIHJldHVy biBhdHRyX3N0cjsKKworICBhcmdzID0gKGNoYXIgKiopeG1hbGxvYyAoYXJn bnVtICogc2l6ZW9mIChjaGFyICopKTsKKworICBpID0gMDsKKyAgYXR0ciA9 IHN0cnRvayAoYXR0cl9zdHIsICIsIik7CisgIHdoaWxlIChhdHRyICE9IE5V TEwpCisgICAgeworICAgICAgYXJnc1tpXSA9IGF0dHI7CisgICAgICBpKys7 CisgICAgICBhdHRyID0gc3RydG9rIChOVUxMLCAiLCIpOworICAgIH0KKwor ICBxc29ydCAoYXJncywgYXJnbnVtLCBzaXplb2YgKGNoYXIqKSwgYXR0cl9z dHJjbXApOworCisgIHJldF9zdHIgPSAoY2hhciAqKXhtYWxsb2MgKHN0cmxl biAoc3RyKSArIDEpOworICBzdHJjcHkgKHJldF9zdHIsIGFyZ3NbMF0pOwor ICBmb3IgKGkgPSAxOyBpIDwgYXJnbnVtOyBpKyspCisgICAgeworICAgICAg c3RyY2F0IChyZXRfc3RyLCAiXyIpOworICAgICAgc3RyY2F0IChyZXRfc3Ry LCBhcmdzW2ldKTsKKyAgICB9CisKKyAgZnJlZSAoYXJncyk7CisgIGZyZWUg KGF0dHJfc3RyKTsKKyAgcmV0dXJuIHJldF9zdHI7Cit9CisKKy8qIFRoaXMg ZnVuY3Rpb24gY2hhbmdlcyB0aGUgYXNzZW1ibGVyIG5hbWUgZm9yIGZ1bmN0 aW9ucyB0aGF0IGFyZQorICAgdmVyc2lvbnMuICBJZiBERUNMIGlzIGEgZnVu Y3Rpb24gdmVyc2lvbiBhbmQgaGFzIGEgInRhcmdldCIKKyAgIGF0dHJpYnV0 ZSwgaXQgYXBwZW5kcyB0aGUgYXR0cmlidXRlIHN0cmluZyB0byBpdHMgYXNz ZW1ibGVyIG5hbWUuICAqLworCitzdGF0aWMgdm9pZAoraXg4Nl9zZXRfdmVy c2lvbl9hc3NlbWJsZXJfbmFtZSAodHJlZSBkZWNsKQoreworICB0cmVlIHZl cnNpb25fYXR0cjsKKyAgY29uc3QgY2hhciAqb3JpZ19uYW1lLCAqdmVyc2lv bl9zdHJpbmcsICphdHRyX3N0cjsKKyAgY2hhciAqYXNzZW1ibGVyX25hbWU7 CisgIHRyZWUgYXNzZW1ibGVyX25hbWVfdHJlZTsKKworICBpZiAoVFJFRV9D T0RFIChkZWNsKSAhPSBGVU5DVElPTl9ERUNMKQorICAgIHJldHVybjsKKwor ICBpZiAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpCisgICAgICAm JiBERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9QIChkZWNsKSkKKyAgICByZXR1 cm47CisKKyAgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpID0gMTsK KworICBpZiAoREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAoZGVjbCkKKyAgICAg ICYmIGxvb2t1cF9hdHRyaWJ1dGUgKCJnbnVfaW5saW5lIiwKKwkJCSAgIERF Q0xfQVRUUklCVVRFUyAoZGVjbCkpKQorICAgIGVycm9yX2F0IChERUNMX1NP VVJDRV9MT0NBVElPTiAoZGVjbCksCisJICAgICAgIkZ1bmN0aW9uIHZlcnNp b25zIGNhbm5vdCBiZSBtYXJrZWQgYXMgZ251X2lubGluZSwiCisJICAgICAg IiBib2RpZXMgaGF2ZSB0byBiZSBnZW5lcmF0ZWRcbiIpOworCisgIGlmIChE RUNMX1ZJUlRVQUxfUCAoZGVjbCkKKyAgICAgIHx8IERFQ0xfVklOREVYIChk ZWNsKSkKKyAgICBlcnJvcl9hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRl Y2wpLAorCSAgICAgICJWaXJ0dWFsIGZ1bmN0aW9uIHZlcnNpb25pbmcgbm90 IHN1cHBvcnRlZFxuIik7CisKKyAgdmVyc2lvbl9hdHRyID0gbG9va3VwX2F0 dHJpYnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpOwor CisgIC8qIHRhcmdldCBhdHRyaWJ1dGUgc3RyaW5nIGlzIE5VTEwgZm9yIGRl ZmF1bHQgZnVuY3Rpb25zLiAgKi8KKyAgaWYgKHZlcnNpb25fYXR0ciA9PSBO VUxMX1RSRUUpCisgICAgcmV0dXJuOworCisgIG9yaWdfbmFtZSA9IElERU5U SUZJRVJfUE9JTlRFUiAoREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCkpOwor ICB2ZXJzaW9uX3N0cmluZworICAgID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAo VFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAodmVyc2lvbl9hdHRyKSkpOworCisg IGF0dHJfc3RyID0gc29ydGVkX2F0dHJfc3RyaW5nICh2ZXJzaW9uX3N0cmlu Zyk7CisgIGFzc2VtYmxlcl9uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoc3Ry bGVuIChvcmlnX25hbWUpCisJCQkJICAgICArIHN0cmxlbiAoYXR0cl9zdHIp ICsgMik7CisKKyAgc3ByaW50ZiAoYXNzZW1ibGVyX25hbWUsICIlcy4lcyIs IG9yaWdfbmFtZSwgYXR0cl9zdHIpOworICBpZiAoZHVtcF9maWxlKQorICAg IGZwcmludGYgKHN0ZGVyciwgIkFzc2VtYmxlciBuYW1lIHNldCB0byAlcyBm b3IgZnVuY3Rpb24gdmVyc2lvbiAlc1xuIiwKKwkgICAgIGFzc2VtYmxlcl9u YW1lLCBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZGVjbCkpKTsK KworICBhc3NlbWJsZXJfbmFtZV90cmVlID0gZ2V0X2lkZW50aWZpZXIgKGFz c2VtYmxlcl9uYW1lKTsKKworICBTRVRfREVDTF9BU1NFTUJMRVJfTkFNRSAo ZGVjbCwgYXNzZW1ibGVyX25hbWVfdHJlZSk7CisgIFNFVF9ERUNMX1JUTCAo ZGVjbCwgTlVMTCk7Cit9CisKKy8qIFJldHVybiBhIG5ldyBuYW1lIGJ5IGFw cGVuZGluZyBTVUZGSVggdG8gdGhlIERFQ0wgbmFtZS4gIElmCisgICBtYWtl X3VuaXF1ZSBpcyB0cnVlLCBhcHBlbmQgdGhlIGZ1bGwgcGF0aCBuYW1lLiAg Ki8KKworc3RhdGljIGNoYXIgKgorbWFrZV9uYW1lICh0cmVlIGRlY2wsIGNv bnN0IGNoYXIgKnN1ZmZpeCwgYm9vbCBtYWtlX3VuaXF1ZSkKK3sKKyAgY2hh ciAqZ2xvYmFsX3Zhcl9uYW1lOworICBpbnQgbmFtZV9sZW47CisgIGNvbnN0 IGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKnVuaXF1ZV9uYW1lID0gTlVM TDsKKworICBuYW1lID0gSURFTlRJRklFUl9QT0lOVEVSIChERUNMX0FTU0VN QkxFUl9OQU1FIChkZWNsKSk7CisKKyAgLyogR2V0IGEgdW5pcXVlIG5hbWUg dGhhdCBjYW4gYmUgdXNlZCBnbG9iYWxseSB3aXRob3V0IGFueSBjaGFuY2Vz CisgICAgIG9mIGNvbGxpc2lvbiBhdCBsaW5rIHRpbWUuICAqLworICBpZiAo bWFrZV91bmlxdWUpCisgICAgdW5pcXVlX25hbWUgPSBJREVOVElGSUVSX1BP SU5URVIgKGdldF9maWxlX2Z1bmN0aW9uX25hbWUgKCJcMCIpKTsKKworICBu YW1lX2xlbiA9IHN0cmxlbiAobmFtZSkgKyBzdHJsZW4gKHN1ZmZpeCkgKyAy OworCisgIGlmIChtYWtlX3VuaXF1ZSkKKyAgICBuYW1lX2xlbiArPSBzdHJs ZW4gKHVuaXF1ZV9uYW1lKSArIDE7CisgIGdsb2JhbF92YXJfbmFtZSA9IChj aGFyICopIHhtYWxsb2MgKG5hbWVfbGVuKTsKKworICAvKiBVc2UgJy4nIHRv IGNvbmNhdGVuYXRlIG5hbWVzIGFzIGl0IGlzIGRlbWFuZ2xlciBmcmllbmRs eS4gICovCisgIGlmIChtYWtlX3VuaXF1ZSkKKyAgICAgIHNucHJpbnRmIChn bG9iYWxfdmFyX25hbWUsIG5hbWVfbGVuLCAiJXMuJXMuJXMiLCBuYW1lLAor CQl1bmlxdWVfbmFtZSwgc3VmZml4KTsKKyAgZWxzZQorICAgICAgc25wcmlu dGYgKGdsb2JhbF92YXJfbmFtZSwgbmFtZV9sZW4sICIlcy4lcyIsIG5hbWUs IHN1ZmZpeCk7CisKKyAgcmV0dXJuIGdsb2JhbF92YXJfbmFtZTsKK30KKwor LyogTWFrZSBhIGRpc3BhdGNoZXIgZGVjbGFyYXRpb24gZm9yIHRoZSBtdWx0 aS12ZXJzaW9uZWQgZnVuY3Rpb24gREVDTC4KKyAgIENhbGxzIHRvIERFQ0wg ZnVuY3Rpb24gd2lsbCBiZSByZXBsYWNlZCB3aXRoIGNhbGxzIHRvIHRoZSBk aXNwYXRjaGVyCisgICBieSB0aGUgZnJvbnQtZW5kLiAgUmV0dXJuIHRoZSBk ZWNsIGNyZWF0ZWQuICAqLworCitzdGF0aWMgdHJlZQorbWFrZV9kaXNwYXRj aGVyX2RlY2wgKGNvbnN0IHRyZWUgZGVjbCkKK3sKKyAgdHJlZSBmdW5jX2Rl Y2w7CisgIGNoYXIgKmZ1bmNfbmFtZSwgKnJlc29sdmVyX25hbWU7CisgIHRy ZWUgZm5fdHlwZSwgZnVuY190eXBlOworICBib29sIGlzX3VuaXEgPSBmYWxz ZTsKKworICBpZiAoVFJFRV9QVUJMSUMgKGRlY2wpID09IDApCisgICAgaXNf dW5pcSA9IHRydWU7CisKKyAgZnVuY19uYW1lID0gbWFrZV9uYW1lIChkZWNs LCAiaWZ1bmMiLCBpc191bmlxKTsKKyAgcmVzb2x2ZXJfbmFtZSA9IG1ha2Vf bmFtZSAoZGVjbCwgInJlc29sdmVyIiwgaXNfdW5pcSk7CisgIGdjY19hc3Nl cnQgKHJlc29sdmVyX25hbWUpOworCisgIGZuX3R5cGUgPSBUUkVFX1RZUEUg KGRlY2wpOworICBmdW5jX3R5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlIChU UkVFX1RZUEUgKGZuX3R5cGUpLAorCQkJCSAgIFRZUEVfQVJHX1RZUEVTIChm bl90eXBlKSk7CisgIAorICBmdW5jX2RlY2wgPSBidWlsZF9mbl9kZWNsIChm dW5jX25hbWUsIGZ1bmNfdHlwZSk7CisgIFRSRUVfVVNFRCAoZnVuY19kZWNs KSA9IDE7CisgIERFQ0xfQ09OVEVYVCAoZnVuY19kZWNsKSA9IE5VTExfVFJF RTsKKyAgREVDTF9JTklUSUFMIChmdW5jX2RlY2wpID0gZXJyb3JfbWFya19u b2RlOworICBERUNMX0FSVElGSUNJQUwgKGZ1bmNfZGVjbCkgPSAxOworICAv KiBNYXJrIHRoaXMgZnVuYyBhcyBleHRlcm5hbCwgdGhlIHJlc29sdmVyIHdp bGwgZmxpcCBpdCBhZ2FpbiBpZgorICAgICBpdCBnZXRzIGdlbmVyYXRlZC4g ICovCisgIERFQ0xfRVhURVJOQUwgKGZ1bmNfZGVjbCkgPSAxOworICAvKiBU aGlzIHdpbGwgYmUgb2YgdHlwZSBJRlVOQ3MgaGF2ZSB0byBiZSBleHRlcm5h bGx5IHZpc2libGUuICAqLworICBUUkVFX1BVQkxJQyAoZnVuY19kZWNsKSA9 IDE7CisKKyAgcmV0dXJuIGZ1bmNfZGVjbDsgIAorfQorCisvKiBSZXR1cm5z IHRydWUgaWYgZGVjbCBpcyBtdWx0aS12ZXJzaW9uZWQgYW5kIERFQ0wgaXMg dGhlIGRlZmF1bHQgZnVuY3Rpb24sCisgICB0aGF0IGlzIGl0IGlzIG5vdCB0 YWdnZWQgd2l0aCB0YXJnZXQgc3BlY2lmaWMgb3B0aW1pemF0aW9uLiAgKi8K Kworc3RhdGljIGJvb2wKK2lzX2Z1bmN0aW9uX2RlZmF1bHRfdmVyc2lvbiAo Y29uc3QgdHJlZSBkZWNsKQoreworICByZXR1cm4gKFRSRUVfQ09ERSAoZGVj bCkgPT0gRlVOQ1RJT05fREVDTAorCSAgJiYgREVDTF9GVU5DVElPTl9WRVJT SU9ORUQgKGRlY2wpCisJICAmJiBERUNMX0ZVTkNUSU9OX1NQRUNJRklDX1RB UkdFVCAoZGVjbCkgPT0gTlVMTF9UUkVFKTsKK30KKworLyogTWFrZSBhIGRp c3BhdGNoZXIgZGVjbGFyYXRpb24gZm9yIHRoZSBtdWx0aS12ZXJzaW9uZWQg ZnVuY3Rpb24gREVDTC4KKyAgIENhbGxzIHRvIERFQ0wgZnVuY3Rpb24gd2ls bCBiZSByZXBsYWNlZCB3aXRoIGNhbGxzIHRvIHRoZSBkaXNwYXRjaGVyCisg ICBieSB0aGUgZnJvbnQtZW5kLiAgSXQgYWxzbyBjaGFpbnMgdGhlIGNncmFw aCBub2RlcyBvZiBhbGwgdGhlCisgICBzZW1hbnRpY2FsbHkgaWRlbnRpY2Fs IHZlcnNpb25zIGluIHZlY3RvciBGTl9WRVJfVkVDX1AuICBSZXR1cm5zIHRo ZQorICAgZGVjbCBvZiB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbi4gICovCisK K3N0YXRpYyB0cmVlCitpeDg2X2dldF9mdW5jdGlvbl92ZXJzaW9uc19kaXNw YXRjaGVyICh2b2lkICpmbl92ZXJfdmVjX3ApCit7CisgIHN0cnVjdCBjZ3Jh cGhfbm9kZSAqbm9kZSA9IE5VTEw7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAq ZGVmYXVsdF9ub2RlID0gTlVMTDsKKyAgc3RydWN0IGNncmFwaF9ub2RlICpj dXJyX25vZGUgPSBOVUxMOworICBpbnQgaXg7CisgIHRyZWUgZWxlOworICB0 cmVlIGRpc3BhdGNoX2RlY2wgPSBOVUxMOworICBWRUMgKHRyZWUsIGhlYXAp ICpmbl92ZXJfdmVjID0gTlVMTDsKKworICBmbl92ZXJfdmVjID0gKFZFQyAo dHJlZSxoZWFwKSAqKSBmbl92ZXJfdmVjX3A7CisgIGdjY19hc3NlcnQgKGZu X3Zlcl92ZWMgIT0gTlVMTCk7CisKKyAgLyogRmluZCB0aGUgZGVmYXVsdCB2 ZXJzaW9uLiAgKi8KKyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh0cmVl LCBmbl92ZXJfdmVjLCBpeCwgZWxlKTsgKytpeCkKKyAgICB7CisgICAgICBp ZiAoaXNfZnVuY3Rpb25fZGVmYXVsdF92ZXJzaW9uIChlbGUpKQorCXsKKwkg IGRlZmF1bHRfbm9kZSA9IGNncmFwaF9nZXRfY3JlYXRlX25vZGUgKGVsZSk7 CisJICBicmVhazsKKwl9CisgICAgfQorCisgIC8qIElmIHRoZXJlIGlzIG5v IGRlZmF1bHQgbm9kZSwganVzdCByZXR1cm4gTlVMTC4gICovCisgIGlmICgh ZGVmYXVsdF9ub2RlKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChkZWZh dWx0X25vZGUtPnZlcnNpb25fZGlzcGF0Y2hlcl9kZWNsKQorICAgIHJldHVy biBkZWZhdWx0X25vZGUtPnZlcnNpb25fZGlzcGF0Y2hlcl9kZWNsOworCisj aWYgZGVmaW5lZCAoQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRSkgJiYgSEFW RV9HTlVfSU5ESVJFQ1RfRlVOQ1RJT04KKyAgLyogUmlnaHQgbm93LCB0aGUg ZGlzcGF0Y2hpbmcgaXMgZG9uZSB2aWEgaWZ1bmMuICAqLworICBkaXNwYXRj aF9kZWNsID0gbWFrZV9kaXNwYXRjaGVyX2RlY2wgKGRlZmF1bHRfbm9kZS0+ c3ltYm9sLmRlY2wpOyAKKyNlbHNlCisgIGVycm9yX2F0IChERUNMX1NPVVJD RV9MT0NBVElPTiAoZGVmYXVsdF9ub2RlLT5zeW1ib2wuZGVjbCksCisJICAg ICJNdWx0aXZlcnNpb25pbmcgbmVlZHMgaWZ1bmMgd2hpY2ggaXMgbm90IHN1 cHBvcnRlZCAiCisJICAgICJpbiB0aGlzIGNvbmZpZ3VyYXRpb24iKTsKKyNl bmRpZgorICBkZWZhdWx0X25vZGUtPnZlcnNpb25fZGlzcGF0Y2hlcl9kZWNs ID0gZGlzcGF0Y2hfZGVjbDsKKyAgY3Vycl9ub2RlID0gY2dyYXBoX2dldF9j cmVhdGVfbm9kZSAoZGlzcGF0Y2hfZGVjbCk7CisgIGdjY19hc3NlcnQgKGN1 cnJfbm9kZSk7CisgIGN1cnJfbm9kZS0+ZGlzcGF0Y2hlcl9mdW5jdGlvbiA9 IDE7CisgIGNncmFwaF9tYXJrX2FkZHJlc3NfdGFrZW5fbm9kZSAoZGVmYXVs dF9ub2RlKTsKKworICBmb3IgKGl4ID0gMDsgVkVDX2l0ZXJhdGUgKHRyZWUs IGZuX3Zlcl92ZWMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsKKyAgICAgIG5v ZGUgPSBjZ3JhcGhfZ2V0X2NyZWF0ZV9ub2RlIChlbGUpOworICAgICAgZ2Nj X2Fzc2VydCAobm9kZSAhPSBOVUxMICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEIChlbGUpKTsKKyAgICAgIGlmIChub2RlID09IGRlZmF1bHRfbm9kZSkK Kwljb250aW51ZTsKKyAgICAgIGdjY19hc3NlcnQgKERFQ0xfRlVOQ1RJT05f U1BFQ0lGSUNfVEFSR0VUIChlbGUpICE9IE5VTExfVFJFRSk7CisKKyAgICAg IGlmIChjdXJyX25vZGUtPm5leHRfZnVuY3Rpb25fdmVyc2lvbikKKyAJewor CSAgbm9kZS0+bmV4dF9mdW5jdGlvbl92ZXJzaW9uID0gY3Vycl9ub2RlLT5u ZXh0X2Z1bmN0aW9uX3ZlcnNpb247CisJICBjdXJyX25vZGUtPm5leHRfZnVu Y3Rpb25fdmVyc2lvbi0+cHJldl9mdW5jdGlvbl92ZXJzaW9uID0gbm9kZTsK Kwl9CisgICAgICBjdXJyX25vZGUtPm5leHRfZnVuY3Rpb25fdmVyc2lvbiA9 IG5vZGU7CisgICAgICBub2RlLT5wcmV2X2Z1bmN0aW9uX3ZlcnNpb24gPSBj dXJyX25vZGU7CisgICAgICBub2RlLT52ZXJzaW9uX2Rpc3BhdGNoZXJfZGVj bCA9IGRpc3BhdGNoX2RlY2w7CisgICAgfQorCisgIC8qIFRoZSBkZWZhdWx0 IHZlcnNpb24gc2hvdWxkIGJlIHRoZSBmaXJzdCBub2RlLiAgKi8KKyAgZGVm YXVsdF9ub2RlLT5uZXh0X2Z1bmN0aW9uX3ZlcnNpb24gPSBjdXJyX25vZGUt Pm5leHRfZnVuY3Rpb25fdmVyc2lvbjsKKyAgY3Vycl9ub2RlLT5uZXh0X2Z1 bmN0aW9uX3ZlcnNpb24tPnByZXZfZnVuY3Rpb25fdmVyc2lvbiA9IGRlZmF1 bHRfbm9kZTsKKyAgY3Vycl9ub2RlLT5uZXh0X2Z1bmN0aW9uX3ZlcnNpb24g PSBkZWZhdWx0X25vZGU7CisgIAorICByZXR1cm4gZGlzcGF0Y2hfZGVjbDsK K30KKworLyogTWFrZXMgYSBmdW5jdGlvbiBhdHRyaWJ1dGUgb2YgdGhlIGZv cm0gTkFNRShBUkdfTkFNRSkgYW5kIGNoYWlucworICAgaXQgdG8gQ0hBSU4u ICAqLworCitzdGF0aWMgdHJlZQorbWFrZV9hdHRyaWJ1dGUgKGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZ19uYW1lLCB0cmVlIGNoYWluKQor eworICB0cmVlIGF0dHJfbmFtZTsKKyAgdHJlZSBhdHRyX2FyZ19uYW1lOwor ICB0cmVlIGF0dHJfYXJnczsKKyAgdHJlZSBhdHRyOworCisgIGF0dHJfbmFt ZSA9IGdldF9pZGVudGlmaWVyIChuYW1lKTsKKyAgYXR0cl9hcmdfbmFtZSA9 IGJ1aWxkX3N0cmluZyAoc3RybGVuIChhcmdfbmFtZSksIGFyZ19uYW1lKTsK KyAgYXR0cl9hcmdzID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGF0dHJfYXJn X25hbWUsIE5VTExfVFJFRSk7CisgIGF0dHIgPSB0cmVlX2NvbnMgKGF0dHJf bmFtZSwgYXR0cl9hcmdzLCBjaGFpbik7CisgIHJldHVybiBhdHRyOworfQor CisvKiBNYWtlIHRoZSByZXNvbHZlciBmdW5jdGlvbiBkZWNsIHRvIGRpc3Bh dGNoIHRoZSB2ZXJzaW9ucyBvZgorICAgYSBtdWx0aS12ZXJzaW9uZWQgZnVu Y3Rpb24sICBERUZBVUxUX0RFQ0wuICBDcmVhdGUgYW4KKyAgIGVtcHR5IGJh c2ljIGJsb2NrIGluIHRoZSByZXNvbHZlciBhbmQgc3RvcmUgdGhlIHBvaW50 ZXIgaW4KKyAgIEVNUFRZX0JCLiAgUmV0dXJuIHRoZSBkZWNsIG9mIHRoZSBy ZXNvbHZlciBmdW5jdGlvbi4gICovCisKK3N0YXRpYyB0cmVlCittYWtlX3Jl c29sdmVyX2Z1bmMgKGNvbnN0IHRyZWUgZGVmYXVsdF9kZWNsLAorCQkgICAg Y29uc3QgdHJlZSBkaXNwYXRjaF9kZWNsLAorCQkgICAgYmFzaWNfYmxvY2sg KmVtcHR5X2JiKQoreworICBjaGFyICpyZXNvbHZlcl9uYW1lOworICB0cmVl IGRlY2wsIHR5cGUsIGRlY2xfbmFtZSwgdDsKKyAgYmFzaWNfYmxvY2sgbmV3 X2JiOworICB0cmVlIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgIGJv b2wgaXNfdW5pcSA9IGZhbHNlOworCisgIC8qIElGVU5DJ3MgaGF2ZSB0byBi ZSBnbG9iYWxseSB2aXNpYmxlLiAgU28sIGlmIHRoZSBkZWZhdWx0X2RlY2wg aXMKKyAgICAgbm90LCB0aGVuIHRoZSBuYW1lIG9mIHRoZSBJRlVOQyBzaG91 bGQgYmUgbWFkZSB1bmlxdWUuICAqLworICBpZiAoVFJFRV9QVUJMSUMgKGRl ZmF1bHRfZGVjbCkgPT0gMCkKKyAgICBpc191bmlxID0gdHJ1ZTsKKworICAv KiBBcHBlbmQgdGhlIGZpbGVuYW1lIHRvIHRoZSByZXNvbHZlciBmdW5jdGlv biBpZiB0aGUgdmVyc2lvbnMgYXJlCisgICAgIG5vdCBleHRlcm5hbGx5IHZp c2libGUuICBUaGlzIGlzIGJlY2F1c2UgdGhlIHJlc29sdmVyIGZ1bmN0aW9u IGhhcworICAgICB0byBiZSBleHRlcm5hbGx5IHZpc2libGUgZm9yIHRoZSBs b2FkZXIgdG8gZmluZCBpdC4gIFNvLCBhcHBlbmRpbmcKKyAgICAgdGhlIGZp bGVuYW1lIHdpbGwgcHJldmVudCBjb25mbGljdHMgd2l0aCBhIHJlc29sdmVy IGZ1bmN0aW9uIGZyb20KKyAgICAgYW5vdGhlciBtb2R1bGUgd2hpY2ggaXMg YmFzZWQgb24gdGhlIHNhbWUgdmVyc2lvbiBuYW1lLiAgKi8KKyAgcmVzb2x2 ZXJfbmFtZSA9IG1ha2VfbmFtZSAoZGVmYXVsdF9kZWNsLCAicmVzb2x2ZXIi LCBpc191bmlxKTsKKworICAvKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gc2hv dWxkIHJldHVybiBhICh2b2lkICopLiAqLworICB0eXBlID0gYnVpbGRfZnVu Y3Rpb25fdHlwZV9saXN0IChwdHJfdHlwZV9ub2RlLCBOVUxMX1RSRUUpOwor CisgIGRlY2wgPSBidWlsZF9mbl9kZWNsIChyZXNvbHZlcl9uYW1lLCB0eXBl KTsKKyAgZGVjbF9uYW1lID0gZ2V0X2lkZW50aWZpZXIgKHJlc29sdmVyX25h bWUpOworICBTRVRfREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCwgZGVjbF9u YW1lKTsKKworICBERUNMX05BTUUgKGRlY2wpID0gZGVjbF9uYW1lOworICBU UkVFX1VTRUQgKGRlY2wpID0gMTsKKyAgREVDTF9BUlRJRklDSUFMIChkZWNs KSA9IDE7CisgIERFQ0xfSUdOT1JFRF9QIChkZWNsKSA9IDA7CisgIC8qIElG VU5DIHJlc29sdmVycyBoYXZlIHRvIGJlIGV4dGVybmFsbHkgdmlzaWJsZS4g ICovCisgIFRSRUVfUFVCTElDIChkZWNsKSA9IDE7CisgIERFQ0xfVU5JTkxJ TkFCTEUgKGRlY2wpID0gMTsKKworICBERUNMX0VYVEVSTkFMIChkZWNsKSA9 IDA7CisgIERFQ0xfRVhURVJOQUwgKGRpc3BhdGNoX2RlY2wpID0gMDsKKwor ICBERUNMX0NPTlRFWFQgKGRlY2wpID0gTlVMTF9UUkVFOworICBERUNMX0lO SVRJQUwgKGRlY2wpID0gbWFrZV9ub2RlIChCTE9DSyk7CisgIERFQ0xfU1RB VElDX0NPTlNUUlVDVE9SIChkZWNsKSA9IDA7CisgIFRSRUVfUkVBRE9OTFkg KGRlY2wpID0gMDsKKyAgREVDTF9QVVJFX1AgKGRlY2wpID0gMDsKKworICBp ZiAoREVDTF9DT01EQVRfR1JPVVAgKGRlZmF1bHRfZGVjbCkpCisgICAgewor ICAgICAgREVDTF9DT01EQVQgKGRlY2wpID0gREVDTF9DT01EQVQgKGRlZmF1 bHRfZGVjbCk7CisgICAgICBtYWtlX2RlY2xfb25lX29ubHkgKGRlY2wsIERF Q0xfQ09NREFUX0dST1VQIChkZWZhdWx0X2RlY2wpKTsKKyAgICB9CisgIGVs c2UgaWYgKFRSRUVfUFVCTElDIChkZWZhdWx0X2RlY2wpKQorICAgIHsKKyAg ICAgIC8qIEluIHRoaXMgY2FzZSwgZWFjaCB0cmFuc2xhdGlvbiB1bml0IHdp dGggYSBjYWxsIHRvIHRoaXMKKwkgdmVyc2lvbmVkIGZ1bmN0aW9uIHdpbGwg cHV0IG91dCBhIHJlc29sdmVyLiAgRW5zdXJlIGl0CisJIGlzIGNvbWRhdCB0 byBrZWVwIGp1c3Qgb25lIGNvcHkuICAqLworICAgICAgREVDTF9DT01EQVQg KGRlY2wpID0gMTsKKyAgICAgIG1ha2VfZGVjbF9vbmVfb25seSAoZGVjbCwg REVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCkpOworICAgIH0KKyAgLyogQnVp bGQgcmVzdWx0IGRlY2wgYW5kIGFkZCB0byBmdW5jdGlvbl9kZWNsLiAqLwor ICB0ID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwgUkVTVUxUX0RF Q0wsIE5VTExfVFJFRSwgcHRyX3R5cGVfbm9kZSk7CisgIERFQ0xfQVJUSUZJ Q0lBTCAodCkgPSAxOworICBERUNMX0lHTk9SRURfUCAodCkgPSAxOworICBE RUNMX1JFU1VMVCAoZGVjbCkgPSB0OworCisgIGdpbXBsaWZ5X2Z1bmN0aW9u X3RyZWUgKGRlY2wpOworICBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsID0g Y3VycmVudF9mdW5jdGlvbl9kZWNsOworICBwdXNoX2NmdW4gKERFQ0xfU1RS VUNUX0ZVTkNUSU9OIChkZWNsKSk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVj bCA9IGRlY2w7CisgIGdpbXBsZV9yZWdpc3Rlcl9jZmdfaG9va3MgKCk7Cisg IGluaXRfZW1wdHlfdHJlZV9jZmdfZm9yX2Z1bmN0aW9uIChERUNMX1NUUlVD VF9GVU5DVElPTiAoZGVjbCkpOworICBjZnVuLT5jdXJyX3Byb3BlcnRpZXMg fD0KKyAgICAoUFJPUF9naW1wbGVfbGNmIHwgUFJPUF9naW1wbGVfbGVoIHwg UFJPUF9jZmcgfCBQUk9QX3NzYQorICAgICB8IFBST1BfZ2ltcGxlX2FueSk7 CisgIGNmdW4tPmN1cnJfcHJvcGVydGllcyA9IDE1OworICBuZXdfYmIgPSBj cmVhdGVfZW1wdHlfYmIgKEVOVFJZX0JMT0NLX1BUUik7CisgIG1ha2VfZWRn ZSAoRU5UUllfQkxPQ0tfUFRSLCBuZXdfYmIsIEVER0VfRkFMTFRIUlUpOwor ICBtYWtlX2VkZ2UgKG5ld19iYiwgRVhJVF9CTE9DS19QVFIsIDApOworICAq ZW1wdHlfYmIgPSBuZXdfYmI7CisKKyAgY2dyYXBoX2FkZF9uZXdfZnVuY3Rp b24gKGRlY2wsIHRydWUpOworICBjZ3JhcGhfY2FsbF9mdW5jdGlvbl9pbnNl cnRpb25faG9va3MgKGNncmFwaF9nZXRfY3JlYXRlX25vZGUgKGRlY2wpKTsK KworICBpZiAoREVDTF9DT01EQVRfR1JPVVAgKGRlZmF1bHRfZGVjbCkpCisg ICAgeworICAgICAgZ2NjX2Fzc2VydCAoY2dyYXBoX2dldF9ub2RlIChkZWZh dWx0X2RlY2wpKTsKKyAgICAgIHN5bXRhYl9hZGRfdG9fc2FtZV9jb21kYXRf Z3JvdXAgKAorCShzeW10YWJfbm9kZSkgY2dyYXBoX2dldF9ub2RlIChkZWNs KSwKKwkoc3ltdGFiX25vZGUpIGNncmFwaF9nZXRfbm9kZSAoZGVmYXVsdF9k ZWNsKSk7CisgICAgfQorCisgIHBvcF9jZnVuICgpOworICBjdXJyZW50X2Z1 bmN0aW9uX2RlY2wgPSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworCisg IGdjY19hc3NlcnQgKGRpc3BhdGNoX2RlY2wgIT0gTlVMTCk7CisgIC8qIE1h cmsgZGlzcGF0Y2hfZGVjbCBhcyAiaWZ1bmMiIHdpdGggcmVzb2x2ZXIgYXMg cmVzb2x2ZXJfbmFtZS4gICovCisgIERFQ0xfQVRUUklCVVRFUyAoZGlzcGF0 Y2hfZGVjbCkgCisgICAgPSBtYWtlX2F0dHJpYnV0ZSAoImlmdW5jIiwgcmVz b2x2ZXJfbmFtZSwgREVDTF9BVFRSSUJVVEVTIChkaXNwYXRjaF9kZWNsKSk7 CisKKyAgLyogQ3JlYXRlIHRoZSBhbGlhcyBmb3IgZGlzcGF0Y2ggdG8gcmVz b2x2ZXIgaGVyZS4gICovCisgIGNncmFwaF9jcmVhdGVfZnVuY3Rpb25fYWxp YXMgKGRpc3BhdGNoX2RlY2wsIGRlY2wpOworICByZXR1cm4gZGVjbDsKK30K KworLyogR2VuZXJhdGUgdGhlIGRpc3BhdGNoaW5nIGNvZGUgYm9keSB0byBk aXNwYXRjaCBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24KKyAgIERFQ0wuICBU aGUgdGFyZ2V0IGhvb2sgaXMgY2FsbGVkIHRvIHByb2Nlc3MgdGhlICJ0YXJn ZXQiIGF0dHJpYnV0ZXMgYW5kCisgICBwcm92aWRlIHRoZSBjb2RlIHRvIGRp c3BhdGNoIHRoZSByaWdodCBmdW5jdGlvbiBhdCBydW4tdGltZS4gIE5PREUg cG9pbnRzCisgICB0byB0aGUgZGlzcGF0Y2hlciBkZWNsIHdob3NlIGJvZHkg d2lsbCBiZSBjcmVhdGVkLiAgKi8KKworc3RhdGljIHRyZWUgCitpeDg2X2dl bmVyYXRlX3ZlcnNpb25fZGlzcGF0Y2hlcl9ib2R5ICh2b2lkICpub2RlX3Ap Cit7CisgIHRyZWUgcmVzb2x2ZXJfZGVjbDsKKyAgYmFzaWNfYmxvY2sgZW1w dHlfYmI7CisgIFZFQyAodHJlZSwgaGVhcCkgKmZuX3Zlcl92ZWMgPSBOVUxM OworICB0cmVlIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgIHRyZWUg ZGVmYXVsdF92ZXJfZGVjbDsKKyAgc3RydWN0IGNncmFwaF9ub2RlICp2ZXJz bjsKKyAgc3RydWN0IGNncmFwaF9ub2RlICpub2RlOworCisgIG5vZGUgPSAo Y2dyYXBoX25vZGUgKilub2RlX3A7CisKKyAgZ2NjX2Fzc2VydCAobm9kZS0+ ZGlzcGF0Y2hlcl9mdW5jdGlvbik7CisKKyAgaWYgKG5vZGUtPnZlcnNpb25f ZGlzcGF0Y2hlcl9kZWNsKQorICAgIHJldHVybiBub2RlLT52ZXJzaW9uX2Rp c3BhdGNoZXJfZGVjbDsKKworICBkZWZhdWx0X3Zlcl9kZWNsID0gbm9kZS0+ bmV4dF9mdW5jdGlvbl92ZXJzaW9uLT5zeW1ib2wuZGVjbDsKKyAgcmVzb2x2 ZXJfZGVjbCA9IG1ha2VfcmVzb2x2ZXJfZnVuYyAoZGVmYXVsdF92ZXJfZGVj bCwKKwkJCQkgICAgICBub2RlLT5zeW1ib2wuZGVjbCwgJmVtcHR5X2JiKTsK KyAgbm9kZS0+dmVyc2lvbl9kaXNwYXRjaGVyX2RlY2wgPSByZXNvbHZlcl9k ZWNsOworCisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBjdXJyZW50 X2Z1bmN0aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1RfRlVO Q1RJT04gKHJlc29sdmVyX2RlY2wpKTsKKyAgY3VycmVudF9mdW5jdGlvbl9k ZWNsID0gcmVzb2x2ZXJfZGVjbDsKKworICBmbl92ZXJfdmVjID0gVkVDX2Fs bG9jICh0cmVlLCBoZWFwLCAyKTsKKworICBmb3IgKHZlcnNuID0gbm9kZS0+ bmV4dF9mdW5jdGlvbl92ZXJzaW9uOyB2ZXJzbjsKKyAgICAgICB2ZXJzbiA9 IHZlcnNuLT5uZXh0X2Z1bmN0aW9uX3ZlcnNpb24pCisgICAgeworICAgICAg LyogQ2hlY2sgZm9yIHZpcnR1YWwgZnVuY3Rpb25zIGhlcmUgYWdhaW4sIGFz IGJ5IHRoaXMgdGltZSBpdCBzaG91bGQKKwkgaGF2ZSBiZWVuIGRldGVybWlu ZWQgaWYgdGhpcyBmdW5jdGlvbiBuZWVkcyBhIHZ0YWJsZSBpbmRleCBvcgor CSBub3QuICBUaGlzIGhhcHBlbnMgZm9yIG1ldGhvZHMgaW4gZGVyaXZlZCBj bGFzc2VzIHRoYXQgb3ZlcnJpZGUKKwkgdmlydHVhbCBtZXRob2RzIGluIGJh c2UgY2xhc3NlcyBidXQgYXJlIG5vdCBleHBsaWNpdGx5IG1hcmtlZCBhcwor CSB2aXJ0dWFsLiAgKi8KKyAgICAgIGlmIChERUNMX1ZJTkRFWCAodmVyc24t PnN5bWJvbC5kZWNsKSkKKyAgICAgICAgZXJyb3JfYXQgKERFQ0xfU09VUkNF X0xPQ0FUSU9OICh2ZXJzbi0+c3ltYm9sLmRlY2wpLAorCQkgICJWaXJ0dWFs IGZ1bmN0aW9uIG11bHRpdmVyc2lvbmluZyBub3Qgc3VwcG9ydGVkIik7Cisg ICAgICBWRUNfc2FmZV9wdXNoICh0cmVlLCBoZWFwLCBmbl92ZXJfdmVjLCB2 ZXJzbi0+c3ltYm9sLmRlY2wpOworICAgIH0KKworICBkaXNwYXRjaF9mdW5j dGlvbl92ZXJzaW9ucyhyZXNvbHZlcl9kZWNsLCBmbl92ZXJfdmVjLCAmZW1w dHlfYmIpOworCisgIHJlYnVpbGRfY2dyYXBoX2VkZ2VzICgpOyAKKyAgcG9w X2NmdW4gKCk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IG9sZF9jdXJy ZW50X2Z1bmN0aW9uX2RlY2w7CisgIHJldHVybiByZXNvbHZlcl9kZWNsOwor fQorCiAvKiBUaGlzIGJ1aWxkcyB0aGUgcHJvY2Vzc29yX21vZGVsIHN0cnVj dCB0eXBlIGRlZmluZWQgaW4KICAgIGxpYmdjYy9jb25maWcvaTM4Ni9jcHVp bmZvLmMgICovCiAKQEAgLTQwNjUyLDYgKzQxNjI4LDIwIEBAIGl4ODZfbWVt bW9kZWxfY2hlY2sgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdmFsKQogI3Vu ZGVmIFRBUkdFVF9GT0xEX0JVSUxUSU4KICNkZWZpbmUgVEFSR0VUX0ZPTERf QlVJTFRJTiBpeDg2X2ZvbGRfYnVpbHRpbgogCisjdW5kZWYgVEFSR0VUX0NP TVBBUkVfVkVSU0lPTl9QUklPUklUWQorI2RlZmluZSBUQVJHRVRfQ09NUEFS RV9WRVJTSU9OX1BSSU9SSVRZIGl4ODZfY29tcGFyZV92ZXJzaW9uX3ByaW9y aXR5CisKKyN1bmRlZiBUQVJHRVRfU0VUX1ZFUlNJT05fQVNTRU1CTEVSX05B TUUKKyNkZWZpbmUgVEFSR0VUX1NFVF9WRVJTSU9OX0FTU0VNQkxFUl9OQU1F IGl4ODZfc2V0X3ZlcnNpb25fYXNzZW1ibGVyX25hbWUKKworI3VuZGVmIFRB UkdFVF9HRVRfRlVOQ1RJT05fVkVSU0lPTlNfRElTUEFUQ0hFUgorI2RlZmlu ZSBUQVJHRVRfR0VUX0ZVTkNUSU9OX1ZFUlNJT05TX0RJU1BBVENIRVIgXAor ICBpeDg2X2dldF9mdW5jdGlvbl92ZXJzaW9uc19kaXNwYXRjaGVyCisKKyN1 bmRlZiBUQVJHRVRfR0VORVJBVEVfVkVSU0lPTl9ESVNQQVRDSEVSX0JPRFkK KyNkZWZpbmUgVEFSR0VUX0dFTkVSQVRFX1ZFUlNJT05fRElTUEFUQ0hFUl9C T0RZIFwKKyAgaXg4Nl9nZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9k eQorCiAjdW5kZWYgVEFSR0VUX0VOVU1fVkFfTElTVF9QCiAjZGVmaW5lIFRB UkdFVF9FTlVNX1ZBX0xJU1RfUCBpeDg2X2VudW1fdmFfbGlzdAogCkBAIC00 MDc4OSw2ICs0MTc3OSw5IEBAIGl4ODZfbWVtbW9kZWxfY2hlY2sgKHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgdmFsKQogI3VuZGVmIFRBUkdFVF9PUFRJT05f UFJJTlQKICNkZWZpbmUgVEFSR0VUX09QVElPTl9QUklOVCBpeDg2X2Z1bmN0 aW9uX3NwZWNpZmljX3ByaW50CiAKKyN1bmRlZiBUQVJHRVRfT1BUSU9OX0ZV TkNUSU9OX1ZFUlNJT05TCisjZGVmaW5lIFRBUkdFVF9PUFRJT05fRlVOQ1RJ T05fVkVSU0lPTlMgaXg4Nl9mdW5jdGlvbl92ZXJzaW9ucworCiAjdW5kZWYg VEFSR0VUX0NBTl9JTkxJTkVfUAogI2RlZmluZSBUQVJHRVRfQ0FOX0lOTElO RV9QIGl4ODZfY2FuX2lubGluZV9wCiAK --14dae9399429c6472c04c80c4054--