From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18014 invoked by alias); 24 May 2011 12:51:24 -0000 Received: (qmail 18002 invoked by uid 22791); 24 May 2011 12:51:16 -0000 X-SWARE-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,TW_BJ,TW_BP,TW_EG,TW_GJ,TW_WB,TW_YB X-Spam-Check-By: sourceware.org Received: from mail-vx0-f169.google.com (HELO mail-vx0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 24 May 2011 12:50:54 +0000 Received: by vxk20 with SMTP id 20so6304339vxk.0 for ; Tue, 24 May 2011 05:50:53 -0700 (PDT) Received: by 10.220.122.96 with SMTP id k32mr1114406vcr.68.1306241453120; Tue, 24 May 2011 05:50:53 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.188.139 with HTTP; Tue, 24 May 2011 05:50:33 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Tue, 24 May 2011 12:51:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0016e68ea4fbcdddb504a4050980 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-05/txt/msg00562.txt.bz2 --0016e68ea4fbcdddb504a4050980 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 11542 Hello, thanks for you comments, I replied inline: > Kevin> -static void > Kevin> +void > Kevin> =A0create_breakpoint_sal (struct gdbarch *gdbarch, > Kevin> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct symtabs_and= _lines sals, char *addr_string, > Kevin> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 char *cond_string, > > What is the rationale for using this function in particular? > > It seems to me that it would probably be better to make an explicit_pc=3D1 > SAL using the unwound PC. =A0Then there would be no reason to avoid the > currently exported API. There isn't. I just followed the "finish" command implementation and understood that this function looked like what I was looking for! I re-wrote this part of the code to use the existing API > Kevin> - =A0if (inferior_thread ()->control.proceed_to_finish) > Kevin> + =A0if (gdbpy_is_stopped_at_finish_bp (inferior_thread ()->contro= l.stop_bpstat) > Kevin> + =A0 =A0 =A0|| inferior_thread ()->control.proceed_to_finish) > > gdbpy_is_stopped_at_finish_bp is not safe to call here -- it assumes the > GIL has been acquired, which it has not. =A0I would rather it not be chan= ged > to acquire the GIL, however. =A0I think one of two other approaches would > be preferable. > > One way you could handle this is to add a new constant to enum bptype. > This is likely to be pretty invasive. > > Another way would be to add a flag to the struct breakpoint itself. > > Yet another way would be a new breakpoint_ops method. you're right; I chose the second way, breakpoint.h: enum py_bp_type { py_bp_none, /* No Python object. */ py_bp_standard, /* Ordinary breakpoint object. */ py_bp_finish /* FinishBreakpoint object. */ }; /* Type of the Python Breakpoint object stored in `py_bp_object'. */ enum py_bp_type py_bp_type; py-breakpoint.c: gdbpy_is_stopped_at_bp_type (bpstat stop_bpstat, enum py_bp_type type) so that it doesn't require GIL state handling > This is related, in a way, to the out-of-scope handling. =A0Right now the > patch tries to reimplement the existing breakpoint re-setting logic in > py-finishbreakpoint.c, via observers. =A0I think it would be better to > have this be done automatically by the existing code in breakpoint.c, > perhaps adding some additional python-visible notification step. I'm not sure what you're talking about; I re-explain and document this aspect at the bottom of the mail, you'll tell me if this is still relevant > Kevin> +static char * const outofscope_func =3D "out_of_scope"; > > "const char *". I copied it from py-breakpoint.c: > static char * const stop_func =3D "stop"; and I think thank we can't change it, otherwise it conflicts with > PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ..= .) and creates a compiler warning > Kevin> + =A0/* The function finished by this breakpoint. =A0*/ > Kevin> + =A0struct symbol *function; > > If you want to store a pointer to a symbol, then you have to account for > the case where the objfile is destroyed. =A0Otherwise you can end up with > a dangling pointer. > > Alternatively, perhaps you could have this refer to a Symbol object; but > then you have to be careful to check it for validity before using it. > > Actually, it seems that the symbol is only used to get the function's > return type. =A0You might as well just compute that up front and store a > Type. > Kevin> +/* Python function to get the 'return_value' attribute of > Kevin> + FinishBreakpoint. */ > Kevin> + > Kevin> +static PyObject * > Kevin> +bpfinishpy_get_returnvalue (PyObject *self, void *closure) > Kevin> +{ > Kevin> + struct finish_breakpoint_object *self_finishbp =3D > Kevin> + (struct finish_breakpoint_object *) self; > Kevin> + > Kevin> + BPPY_REQUIRE_VALID (&self_finishbp->py_bp); > Kevin> + > Kevin> + if (self_finishbp->function =3D=3D NULL) > Kevin> + goto return_none; > Kevin> + > Kevin> + /* Ensure that GDB is stopped at this FinishBreakpoint. */ > Kevin> + if (inferior_thread ()->control.stop_bpstat !=3D NULL) > Kevin> + { > Kevin> + bpstat bs; > Kevin> + > Kevin> + for(bs =3D inferior_thread ()->control.stop_bpstat; > Kevin> + bs; bs =3D bs->next) > > I am not an expert here, but I think it is probably no good to rely on > this state remaining live. > > I think it would be better to simply have a stop at one of these > breakpoints compute and cache the Value object immediately. as per your two comments, I now only store the `struct type' of the function and the return value, and cache the `gdb.Value' object when GDB stops at a FinishBreakpoint. `FinishBreakpoint.return_value' may have to populate the cache when it's accessed from Breakpoint.stop() because there is no guarantee the FinishBreakpoint observer will be notified first. > Kevin> +static void > Kevin> +gdbpy_out_of_scope (struct finish_breakpoint_object *bpfinish_obj) > Kevin> +{ > Kevin> + =A0breakpoint_object *bp_obj =3D (breakpoint_object *) bpfinish_= obj; > Kevin> + =A0PyObject *py_obj =3D (PyObject *) bp_obj ; > Kevin> + > Kevin> + =A0bpfinish_obj->out_of_scope_notif =3D 0; > Kevin> + > Kevin> + =A0if (PyObject_HasAttrString (py_obj, outofscope_func)) > Kevin> + =A0 =A0{ > Kevin> + =A0 =A0 =A0struct gdbarch *garch =3D =A0bp_obj->bp->gdbarch ? > Kevin> + =A0 =A0 =A0 =A0 =A0bp_obj->bp->gdbarch : get_current_arch (); > Kevin> + =A0 =A0 =A0struct cleanup *cleanup =3D ensure_python_env (garch,= current_language); > > You can't call any Python functions without the GIL. > This applies to PyObject_HasAttrString here. > > In this case, though, gdbpy_out_of_scope is called by one function that > already has the GIL. =A0So, I think the acquisition should be pushed into > its other caller. fixed > Kevin> + =A0pc =3D get_frame_pc (prev_frame); > > This can throw an exception. =A0So, it needs to be wrapped in a TRY_CATCH. > This may apply to some other GDB functions called by the "Python-facing" > code, I did not check them all. fixed > Kevin> diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint-cc.exp = b/gdb/testsuite/gdb.python/py-finish-breakpoint-cc.exp > > Funny file name. funny but correct, or too funny? ;) > Kevin> +gdb_test "python ExceptionBreakpoint()" "ExceptionBreakpoint init= " "set BP before throwing the exception" > Kevin> +gdb_test "python print len(gdb.breakpoints())" "4" "check number = of BPs" > Kevin> +gdb_test "continue" ".*stopped at ExceptionFinishBreakpoint.*" "c= heck FinishBreakpoint in catch()" > Kevin> +gdb_test "python print len(gdb.breakpoints())" "4" "check finish = BP removal" > > I don't think this tests the most important case -- where an exception > is thrown, invalidating the return breakpoint. > > That is, put a breakpoint in throw_exception_1, continue to there, then > set the breakpoint, then continue again. > > I didn't examine the longjmp test but the same idea applies there. > > Other cases to consider are - > > * inferior exec > * inferior exit > * explicit inferior function call > * "return" command I'll work on the tests for the next version of the patch ("return" should already be covered) -- so, about the `out_of_scope' stuffs, > Kevin> +/* Python function to set the 'out_of_scope_notif' attribute of > Kevin> + FinishBreakpoint. */ > Kevin> + > Kevin> +static int > Kevin> +bpfinishpy_set_outofscope_notif (PyObject *self, PyObject *newval= ue, > Kevin> + void *closure) > > I don't understand the point of this function. > > I think documentation would help. here is a bit of documentation about this class: @subsubsection Finish Breakpoints @cindex python finish breakpoints @tindex gdb.FinishBreakpoint A @fdb{finish breakpoint} is a breakpoint set at the return address of a frame, based on the "finish command. @code{gdb.FinishBreakpoint} extends @code{gdb.Breakpoint} @defmethod FinishBreakpoint __init__ frame @r{[}internal@r{]} Create a FinishBreakpoint at the return of the @code{gdb.Frame} object @var{frame}. The optional @var{internal} argument allows the breakpoint to become invisible to the user. @xref{Breakpoints In Python}, for further details about this argument. @end defmethod @defop Operation {gdb.Breakpoint} out_of_scope (self) In some circonstances (eg, @code{longjmp}, C++ exceptions, @value{GDBN} @code{return} command, ...), a function may not properly terminate, and thus never hit a @{code} FinishBreakpoint. When @value{GDBN} notices such a situation, the @code{out_of_scope} function will be triggered. This method will only be called if the @code{out_of_scope_notif} attribute is @code{True}. Deleting (@code{gdb.Breakpoint.delete()}) the @code{FinishBreakpoint} is allowed in this function. You may want to sub-class the @code{gdb.FinishBreakpoint} and implement the @code{out_of_scope} method: @smallexample class MyFinishBreakpoint (gdb.FinishBreakpoint) def stop (self): print "normal finish" return True =09 def out_of_scope(): print "abnormal finish" @end smallexample @end defop @defmethod FinishBreakpoint check_scope Because @value{GDBN} currently only checks if @code{FinishBreakpoint}s ran out of scope at normal stops, this method allows to force the verification and trigger the @code{out_of_scope} method if necessary. It will return @code{True} if @code{out_of_scope()} was triggered, @code{False} otherwise. @end defmethod @defivar FinishBreakpoint out_of_scope_notif This attribute will be @code{True} until the @code{out_of_scope} method has been called and @code{False} afterwards. This attribute is writeable, so out of scope notifications can be re-enabled. @end defivar @defivar FinishBreakpoint return_value When @value{GDBN} is stopped at a @code{FinishBreakpoint}, and the frame used to build the @code{FinishBreakpoint} had debug symbols, this attribute will contain a @code{gdb.Value} object corresponding to the return value of the function. The value will be @code{None} if the value was not computable. This attribute is not writable. @end defivar > Kevin> +static PyMethodDef finish_breakpoint_object_methods[] =3D { > Kevin> + { "check_scope", bpfinishpy_check_scope, METH_NOARGS, > Kevin> + "check_scope () -> Boolean.\n\ > Kevin> +Return true if out_of_scope() has been triggered, false if not." = }, > > How is this useful? > And, why a method instead of an attribute? as described, this is useful especially in the case of a GDB-forced "return": normal_stop observers are not notified, so `out_of_scope()' is not triggered. `check_scope()' allows Python scripts to force this verification when they need. The reason why it's a method is that it may execute `out_of_scope()', which was, from my point of view, inconsistent with the concept of attribute. > Kevin> +static PyGetSetDef finish_breakpoint_object_getset[] =3D { > Kevin> + { "out_of_scope_notif", bpfinishpy_get_outofscope_notif, bpfini= shpy_set_outofscope_notif, > > I don't like the name "out_of_scope_notif", particularly if this is an > apt description of its meaning: > Kevin> + "Boolean telling whether the breakpoint is still within the s= cope \ > Kevin> +of the current callstack.", NULL }, I've got some difficulties to find a correct name for this attribute, which is used for two purposes: - avoid calling `out_of_scope' every normal_stop when the breakpoint is not anymore in the callstack - allow the script to re-activate notification when it wants to 're-use' the FinishBreakpoint (instead of deleting it / creating a new one) cordially, Kevin --0016e68ea4fbcdddb504a4050980 Content-Type: text/plain; charset=US-ASCII; name="finish_bp.txt" Content-Disposition: attachment; filename="finish_bp.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_go37gjqs0 Content-length: 74514 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCA1YmFiMzYwLi4yNTA3OTM4IDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0yODUsNiArMjg1 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktZXZ0cmVnaXN0cnku byBcCiAJcHktZXZ0cy5vIFwKIAlweS1leGl0ZWRldmVudC5vIFwKKwlweS1m aW5pc2hicmVha3BvaW50Lm8gXAogCXB5LWZyYW1lLm8gXAogCXB5LWZ1bmN0 aW9uLm8gXAogCXB5LWluZmVyaW9yLm8gXApAQCAtMzE1LDYgKzMxNiw3IEBA IFNVQkRJUl9QWVRIT05fU1JDUyA9IFwKIAlweXRob24vcHktZXZ0cmVnaXN0 cnkuYyBcCiAJcHl0aG9uL3B5LWV2dHMuYyBcCiAJcHl0aG9uL3B5LWV4aXRl ZGV2ZW50LmMgXAorCXB5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMgXAog CXB5dGhvbi9weS1mcmFtZS5jIFwKIAlweXRob24vcHktZnVuY3Rpb24uYyBc CiAJcHl0aG9uL3B5LWluZmVyaW9yLmMgXApAQCAtMjA2Miw2ICsyMDY0LDEw IEBAIHB5LWV4aXRlZGV2ZW50Lm86ICQoc3JjZGlyKS9weXRob24vcHktZXhp dGVkZXZlbnQuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMKIAkkKFBPU1RDT01QSUxF KQogCitweS1maW5pc2hicmVha3BvaW50Lm86ICQoc3JjZGlyKS9weXRob24v cHktZmluaXNoYnJlYWtwb2ludC5jCisJJChDT01QSUxFKSAkKFBZVEhPTl9D RkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5j CisJJChQT1NUQ09NUElMRSkKKwogcHktZnJhbWUubzogJChzcmNkaXIpL3B5 dGhvbi9weS1mcmFtZS5jCiAJJChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1Mp ICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUuYwogCSQoUE9TVENPTVBJTEUp CmRpZmYgLS1naXQgYS9nZGIvYnJlYWtwb2ludC5jIGIvZ2RiL2JyZWFrcG9p bnQuYwppbmRleCA3MDkzMTA0Li5jMWM0ZjA2IDEwMDY0NAotLS0gYS9nZGIv YnJlYWtwb2ludC5jCisrKyBiL2dkYi9icmVha3BvaW50LmMKQEAgLTU4MTQs NiArNTgxNCw3IEBAIHNldF9yYXdfYnJlYWtwb2ludF93aXRob3V0X2xvY2F0 aW9uIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKICAgYi0+b3BzID0gTlVM TDsKICAgYi0+Y29uZGl0aW9uX25vdF9wYXJzZWQgPSAwOwogICBiLT5weV9i cF9vYmplY3QgPSBOVUxMOworICBiLT5weV9icF90eXBlID0gcHlfYnBfbm9u ZTsKICAgYi0+cmVsYXRlZF9icmVha3BvaW50ID0gYjsKIAogICAvKiBBZGQg dGhpcyBicmVha3BvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGNoYWluIHNvIHRo YXQgYSBsaXN0IG9mCmRpZmYgLS1naXQgYS9nZGIvYnJlYWtwb2ludC5oIGIv Z2RiL2JyZWFrcG9pbnQuaAppbmRleCA3ZmE3MDVmLi5hMTU3NWE1IDEwMDY0 NAotLS0gYS9nZGIvYnJlYWtwb2ludC5oCisrKyBiL2dkYi9icmVha3BvaW50 LmgKQEAgLTE2NCw2ICsxNjQsMTUgQEAgZW51bSBicHR5cGUKICAgICBicF9n bnVfaWZ1bmNfcmVzb2x2ZXJfcmV0dXJuLAogICB9OwogCisvKiBUeXBlIG9m IHRoZSBQeXRob24gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBhIGJyZWFrcG9p bnQuICAqLworCitlbnVtIHB5X2JwX3R5cGUKKyAgeworICAgIHB5X2JwX25v bmUsICAgICAgICAgLyogTm8gUHl0aG9uIG9iamVjdC4gICovCisgICAgcHlf YnBfc3RhbmRhcmQsICAgICAvKiBPcmRpbmFyeSBicmVha3BvaW50IG9iamVj dC4gICovCisgICAgcHlfYnBfZmluaXNoICAgICAgICAvKiBGaW5pc2hCcmVh a3BvaW50IG9iamVjdC4gICovCisgIH07CisKIC8qIFN0YXRlcyBvZiBlbmFi bGVtZW50IG9mIGJyZWFrcG9pbnQuICAqLwogCiBlbnVtIGVuYWJsZV9zdGF0 ZQpAQCAtNjU0LDYgKzY2Myw5IEBAIHN0cnVjdCBicmVha3BvaW50CiAgICAg ICAgdHlwZXMgYXJlIHRyYWNrZWQgYnkgdGhlIFB5dGhvbiBzY3JpcHRpbmcg QVBJLiAgKi8KICAgICBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKnB5X2Jw X29iamVjdDsKIAorICAgIC8qIFR5cGUgb2YgdGhlIFB5dGhvbiBCcmVha3Bv aW50IG9iamVjdCBzdG9yZWQgaW4gYHB5X2JwX29iamVjdCcuICAqLworICAg IGVudW0gcHlfYnBfdHlwZSBweV9icF90eXBlOworCiAgICAgLyogV2hldGhl ciB0aGlzIHdhdGNocG9pbnQgaXMgZXhhY3QgKHNlZSB0YXJnZXRfZXhhY3Rf d2F0Y2hwb2ludHMpLiAgKi8KICAgICBpbnQgZXhhY3Q7CiAKZGlmZiAtLWdp dCBhL2dkYi9kb2MvZ2RiLnRleGluZm8gYi9nZGIvZG9jL2dkYi50ZXhpbmZv CmluZGV4IDU4NGE1MjAuLjI3NzM4YjQgMTAwNjQ0Ci0tLSBhL2dkYi9kb2Mv Z2RiLnRleGluZm8KKysrIGIvZ2RiL2RvYy9nZGIudGV4aW5mbwpAQCAtMjM1 MTMsNiArMjM1MTMsNzAgQEAgY29tbWFuZHMsIHNlcGFyYXRlZCBieSBuZXds aW5lcy4gIElmIHRoZXJlIGFyZSBubyBjb21tYW5kcywgdGhpcwogYXR0cmli dXRlIGlzIEBjb2Rle05vbmV9LiAgVGhpcyBhdHRyaWJ1dGUgaXMgbm90IHdy aXRhYmxlLgogQGVuZCBkZWZpdmFyCiAKK0BzdWJzdWJzZWN0aW9uIEZpbmlz aCBCcmVha3BvaW50cworCitAY2luZGV4IHB5dGhvbiBmaW5pc2ggYnJlYWtw b2ludHMKK0B0aW5kZXggZ2RiLkZpbmlzaEJyZWFrcG9pbnQKKworQSBAZmRi e2ZpbmlzaCBicmVha3BvaW50fSBpcyBhIGJyZWFrcG9pbnQgc2V0IGF0IHRo ZSByZXR1cm4gYWRkcmVzcyBvZgorYSBmcmFtZSwgYmFzZWQgb24gdGhlICJm aW5pc2ggY29tbWFuZC4gQGNvZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9IGV4 dGVuZHMKK0Bjb2Rle2dkYi5CcmVha3BvaW50fQorCitAZGVmbWV0aG9kIEZp bmlzaEJyZWFrcG9pbnQgX19pbml0X18gZnJhbWUgQHJ7W31pbnRlcm5hbEBy e119CitDcmVhdGUgYSBGaW5pc2hCcmVha3BvaW50IGF0IHRoZSByZXR1cm4g b2YgdGhlIEBjb2Rle2dkYi5GcmFtZX0gb2JqZWN0IAorQHZhcntmcmFtZX0u IFRoZSBvcHRpb25hbCBAdmFye2ludGVybmFsfSBhcmd1bWVudCBhbGxvd3Mg dGhlIGJyZWFrcG9pbnQKK3RvIGJlY29tZSBpbnZpc2libGUgdG8gdGhlIHVz ZXIuIEB4cmVme0JyZWFrcG9pbnRzIEluIFB5dGhvbn0sIGZvciBmdXJ0aGVy IAorZGV0YWlscyBhYm91dCB0aGlzIGFyZ3VtZW50LgorQGVuZCBkZWZtZXRo b2QKKworQGRlZm9wIE9wZXJhdGlvbiB7Z2RiLkJyZWFrcG9pbnR9IG91dF9v Zl9zY29wZSAoc2VsZikKK0luIHNvbWUgY2lyY29uc3RhbmNlcyAoZWcsIEBj b2Rle2xvbmdqbXB9LCBDKysgZXhjZXB0aW9ucywgQHZhbHVle0dEQk59IAor QGNvZGV7cmV0dXJufSBjb21tYW5kLCAuLi4pLCBhIGZ1bmN0aW9uIG1heSBu b3QgcHJvcGVybHkgdGVybWluYXRlLCBhbmQgdGh1cyAKK25ldmVyIGhpdCBh IEB7Y29kZX0gRmluaXNoQnJlYWtwb2ludC4gV2hlbiBAdmFsdWV7R0RCTn0g bm90aWNlcyBzdWNoIGEgCitzaXR1YXRpb24sIHRoZSBAY29kZXtvdXRfb2Zf c2NvcGV9IGZ1bmN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLgorCitUaGlzIG1l dGhvZCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBAY29kZXtvdXRfb2Zf c2NvcGVfbm90aWZ9IGF0dHJpYnV0ZSAKK2lzIEBjb2Rle1RydWV9LgorCitE ZWxldGluZyAoQGNvZGV7Z2RiLkJyZWFrcG9pbnQuZGVsZXRlICgpfSkgdGhl IEBjb2Rle0ZpbmlzaEJyZWFrcG9pbnR9IGlzCithbGxvd2VkIGluIHRoaXMg ZnVuY3Rpb24uCisKK1lvdSBtYXkgd2FudCB0byBzdWItY2xhc3MgdGhlIEBj b2Rle2dkYi5GaW5pc2hCcmVha3BvaW50fSBhbmQgaW1wbGVtZW50IHRoZQor QGNvZGV7b3V0X29mX3Njb3BlfSBtZXRob2Q6CisKK0BzbWFsbGV4YW1wbGUK K2NsYXNzIE15RmluaXNoQnJlYWtwb2ludCAoZ2RiLkZpbmlzaEJyZWFrcG9p bnQpCisJZGVmIHN0b3AgKHNlbGYpOgorCQlwcmludCAibm9ybWFsIGZpbmlz aCIKKwkJcmV0dXJuIFRydWUKKwkKKwlkZWYgb3V0X29mX3Njb3BlICgpOgor CQlwcmludCAiYWJub3JtYWwgZmluaXNoIgorQGVuZCBzbWFsbGV4YW1wbGUg CitAZW5kIGRlZm9wCisKK0BkZWZtZXRob2QgRmluaXNoQnJlYWtwb2ludCBj aGVja19zY29wZQorQmVjYXVzZSBAdmFsdWV7R0RCTn0gY3VycmVudGx5IG9u bHkgY2hlY2tzIGlmIEBjb2Rle0ZpbmlzaEJyZWFrcG9pbnR9cyByYW4KK291 dCBvZiBzY29wZSBhdCBub3JtYWwgc3RvcHMsIHRoaXMgbWV0aG9kIGFsbG93 cyB0byBmb3JjZSB0aGUgdmVyaWZpY2F0aW9uCithbmQgdHJpZ2dlciB0aGUg QGNvZGV7b3V0X29mX3Njb3BlfSBtZXRob2QgaWYgbmVjZXNzYXJ5LiBJdCB3 aWxsIHJldHVybiAKK0Bjb2Rle1RydWV9IGlmIEBjb2Rle291dF9vZl9zY29w ZSAoKX0gd2FzIHRyaWdnZXJlZCwgQGNvZGV7RmFsc2V9IG90aGVyd2lzZS4K K0BlbmQgZGVmbWV0aG9kCisKKworQGRlZml2YXIgRmluaXNoQnJlYWtwb2lu dCBvdXRfb2Zfc2NvcGVfbm90aWYKK1RoaXMgYXR0cmlidXRlIHdpbGwgYmUg QGNvZGV7VHJ1ZX0gdW50aWwgdGhlIEBjb2Rle291dF9vZl9zY29wZX0gbWV0 aG9kIGhhcworYmVlbiBjYWxsZWQgYW5kIEBjb2Rle0ZhbHNlfSBhZnRlcndh cmRzLiBUaGlzIGF0dHJpYnV0ZSBpcyB3cml0ZWFibGUsIHNvIG91dAorb2Yg c2NvcGUgbm90aWZpY2F0aW9ucyBjYW4gYmUgcmUtZW5hYmxlZC4KK0BlbmQg ZGVmaXZhcgorCitAZGVmaXZhciBGaW5pc2hCcmVha3BvaW50IHJldHVybl92 YWx1ZQorV2hlbiBAdmFsdWV7R0RCTn0gaXMgc3RvcHBlZCBhdCBhIEBjb2Rl e0ZpbmlzaEJyZWFrcG9pbnR9LCBhbmQgdGhlIGZyYW1lIAordXNlZCB0byBi dWlsZCB0aGUgQGNvZGV7RmluaXNoQnJlYWtwb2ludH0gaGFkIGRlYnVnIHN5 bWJvbHMsIHRoaXMgYXR0cmlidXRlCit3aWxsIGNvbnRhaW4gYSBAY29kZXtn ZGIuVmFsdWV9IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4g dmFsdWUgb2YKK3RoZSBmdW5jdGlvbi4gVGhlIHZhbHVlIHdpbGwgYmUgQGNv ZGV7Tm9uZX0gaWYgdGhlIHZhbHVlIHdhcyBub3QgY29tcHV0YWJsZS4KK1Ro aXMgYXR0cmlidXRlIGlzIG5vdCB3cml0YWJsZS4KK0BlbmQgZGVmaXZhcgor CiBAbm9kZSBMYXp5IFN0cmluZ3MgSW4gUHl0aG9uCiBAc3Vic3Vic2VjdGlv biBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgbGF6eSBzdHJpbmdzLgogCkBA IC0zNTIzOSw3ICszNTMwMyw3IEBAIGlzIHN0b3BwZWQgYXQgdGhlIHVzZXIn cyByZXF1ZXN0LgogCiBAbm9kZSBMaXN0IG9mIFN1cHBvcnRlZCBDYWxscwog QHN1YnNlY3Rpb24gTGlzdCBvZiBTdXBwb3J0ZWQgQ2FsbHMKLUBjaW5kZXgg bGlzdCBvZiBzdXBwb3J0ZWQgZmlsZS1pL28gY2FsbHMKK0BjaW5kZXggbGlz dCBvZiBzdXBwb3J0ZWQgZkZpbmlsZS1pL28gY2FsbHMKIAogQG1lbnUKICog b3Blbjo6CmRpZmYgLS1naXQgYS9nZGIvaW5mY21kLmMgYi9nZGIvaW5mY21k LmMKaW5kZXggYmUxZjBhNS4uMmQxOWVhOSAxMDA2NDQKLS0tIGEvZ2RiL2lu ZmNtZC5jCisrKyBiL2dkYi9pbmZjbWQuYwpAQCAtMTM3OCwxNCArMTM3OCwx MiBAQCBhZHZhbmNlX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5 KQogICB1bnRpbF9icmVha19jb21tYW5kIChhcmcsIGZyb21fdHR5LCAxKTsK IH0KIAwKLS8qIFByaW50IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0 aGUgZW5kIG9mIGEgJ2ZpbmlzaCcgY29tbWFuZC4gICovCisvKiBSZXR1cm5z IHRoZSB2YWx1ZSBvZiB0aGUgcmVzdWx0IGF0IHRoZSBlbmQgb2YgYSAnZmlu aXNoJyBjb21tYW5kL0JQLiAgKi8KIAotc3RhdGljIHZvaWQKLXByaW50X3Jl dHVybl92YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5 cGUgKnZhbHVlX3R5cGUpCitzdHJ1Y3QgdmFsdWUgKgorZ2V0X3JldHVybl92 YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZh bHVlX3R5cGUpCiB7CiAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0 X3JlZ2NhY2hlX2FyY2ggKHN0b3BfcmVnaXN0ZXJzKTsKLSAgc3RydWN0IGNs ZWFudXAgKm9sZF9jaGFpbjsKLSAgc3RydWN0IHVpX3N0cmVhbSAqc3RiOwog ICBzdHJ1Y3QgdmFsdWUgKnZhbHVlOwogCiAgIENIRUNLX1RZUEVERUYgKHZh bHVlX3R5cGUpOwpAQCAtMTQxNSw2ICsxNDEzLDE4IEBAIHByaW50X3JldHVy bl92YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUg KnZhbHVlX3R5cGUpCiAgICAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18s IF9fTElORV9fLCBfKCJiYWQgc3dpdGNoIikpOwogICAgIH0KIAorICByZXR1 cm4gdmFsdWU7Cit9CisKKy8qIFByaW50IHRoZSByZXN1bHQgb2YgYSBmdW5j dGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2ZpbmlzaCcgY29tbWFuZC4gICovCisK K3N0YXRpYyB2b2lkCitwcmludF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBl ICpmdW5jX3R5cGUsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBlKQoreworICBz dHJ1Y3QgdmFsdWUgKnZhbHVlID0gZ2V0X3JldHVybl92YWx1ZSAoZnVuY190 eXBlLCB2YWx1ZV90eXBlKTsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFp bjsKKyAgc3RydWN0IHVpX3N0cmVhbSAqc3RiOworCiAgIGlmICh2YWx1ZSkK ICAgICB7CiAgICAgICBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyBvcHRz OwpkaWZmIC0tZ2l0IGEvZ2RiL2luZmVyaW9yLmggYi9nZGIvaW5mZXJpb3Iu aAppbmRleCAxNWUzY2EyLi5lMzhjZTU0IDEwMDY0NAotLS0gYS9nZGIvaW5m ZXJpb3IuaAorKysgYi9nZGIvaW5mZXJpb3IuaApAQCAtMjg1LDYgKzI4NSw5 IEBAIGV4dGVybiB2b2lkIGRldGFjaF9jb21tYW5kIChjaGFyICosIGludCk7 CiAKIGV4dGVybiB2b2lkIG5vdGljZV9uZXdfaW5mZXJpb3IgKHB0aWRfdCwg aW50LCBpbnQpOwogCitleHRlcm4gc3RydWN0IHZhbHVlICpnZXRfcmV0dXJu X3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHR5cGUgKnZhbHVl X3R5cGUpOworCiAvKiBBZGRyZXNzIGF0IHdoaWNoIGluZmVyaW9yIHN0b3Bw ZWQuICAqLwogCiBleHRlcm4gQ09SRV9BRERSIHN0b3BfcGM7CmRpZmYgLS1n aXQgYS9nZGIvaW5mcnVuLmMgYi9nZGIvaW5mcnVuLmMKaW5kZXggOGQ2OTEw ZC4uYzkwYTVkZiAxMDA2NDQKLS0tIGEvZ2RiL2luZnJ1bi5jCisrKyBiL2dk Yi9pbmZydW4uYwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgImlubGlu ZS1mcmFtZS5oIgogI2luY2x1ZGUgImppdC5oIgogI2luY2x1ZGUgInRyYWNl cG9pbnQuaCIKKyNpbmNsdWRlICJweXRob24vcHl0aG9uLmgiCiAKIC8qIFBy b3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucyAqLwogCkBAIC0zMzYsNyAr MzM3LDggQEAgc2hvd19zdG9wX29uX3NvbGliX2V2ZW50cyAoc3RydWN0IHVp X2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwKIGludCBzdG9wX2FmdGVyX3Ry YXA7CiAKIC8qIFNhdmUgcmVnaXN0ZXIgY29udGVudHMgaGVyZSB3aGVuIGV4 ZWN1dGluZyBhICJmaW5pc2giIGNvbW1hbmQgb3IgYXJlCi0gICBhYm91dCB0 byBwb3AgYSBzdGFjayBkdW1teSBmcmFtZSwgaWYtYW5kLW9ubHktaWYgcHJv Y2VlZF90b19maW5pc2ggaXMgc2V0LgorICAgYWJvdXQgdG8gcG9wIGEgc3Rh Y2sgZHVtbXkgZnJhbWUsIGlmLWFuZC1vbmx5LWlmIHByb2NlZWRfdG9fZmlu aXNoIGlzIHNldAorICAgb3IgYSBQeXRob24gRmluaXNoQnJlYWtwb2ludCBo YXZlIGJlZW4gaGl0LgogICAgVGh1cyB0aGlzIGNvbnRhaW5zIHRoZSByZXR1 cm4gdmFsdWUgZnJvbSB0aGUgY2FsbGVkIGZ1bmN0aW9uIChhc3N1bWluZwog ICAgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhIHJlZ2lzdGVyKS4gICovCiAK QEAgLTU4MjMsNyArNTgyNSw5IEBAIG5vcm1hbF9zdG9wICh2b2lkKQogCiAg IC8qIFNhdmUgdGhlIGZ1bmN0aW9uIHZhbHVlIHJldHVybiByZWdpc3RlcnMs IGlmIHdlIGNhcmUuCiAgICAgIFdlIG1pZ2h0IGJlIGFib3V0IHRvIHJlc3Rv cmUgdGhlaXIgcHJldmlvdXMgY29udGVudHMuICAqLwotICBpZiAoaW5mZXJp b3JfdGhyZWFkICgpLT5jb250cm9sLnByb2NlZWRfdG9fZmluaXNoKQorICBp ZiAoZ2RicHlfaXNfc3RvcHBlZF9hdF9icF90eXBlIChpbmZlcmlvcl90aHJl YWQgKCktPmNvbnRyb2wuc3RvcF9icHN0YXQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHB5X2JwX2ZpbmlzaCkKKyAgICAgIHx8IGlu ZmVyaW9yX3RocmVhZCAoKS0+Y29udHJvbC5wcm9jZWVkX3RvX2ZpbmlzaCkK ICAgICB7CiAgICAgICAvKiBUaGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5 LiAgKi8KICAgICAgIGlmIChzdG9wX3JlZ2lzdGVycykKZGlmZiAtLWdpdCBh L2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jIGIvZ2RiL3B5dGhvbi9weS1i cmVha3BvaW50LmMKaW5kZXggOWMzMzg0OC4uMDcyNDdkOCAxMDA2NDQKLS0t IGEvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKKysrIGIvZ2RiL3B5dGhv bi9weS1icmVha3BvaW50LmMKQEAgLTMxLDUyICszMSwxOCBAQAogI2luY2x1 ZGUgImFyY2gtdXRpbHMuaCIKICNpbmNsdWRlICJsYW5ndWFnZS5oIgogCi1z dGF0aWMgUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGU7CitQ eVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZTsKIAogLyogTnVt YmVyIG9mIGxpdmUgYnJlYWtwb2ludHMuICAqLwogc3RhdGljIGludCBicHB5 X2xpdmU7CiAKIC8qIFZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRp b24gYmV0d2VlbiB0aGUgQnJlYWtwb2ludAogICAgY29uc3RydWN0b3IgYW5k IHRoZSBicmVha3BvaW50LWNyZWF0ZWQgaG9vayBmdW5jdGlvbi4gICovCi1z dGF0aWMgYnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7 CiticmVha3BvaW50X29iamVjdCAqYnBweV9wZW5kaW5nX29iamVjdDsKIAog LyogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhIFB5dGhvbiBjb25k aXRpb24gaXMgZXZhbHVhdGVkLiAgKi8KIHN0YXRpYyBjaGFyICogY29uc3Qg c3RvcF9mdW5jID0gInN0b3AiOwogCi1zdHJ1Y3QgYnJlYWtwb2ludF9vYmpl Y3QKLXsKLSAgUHlPYmplY3RfSEVBRAotCi0gIC8qIFRoZSBicmVha3BvaW50 IG51bWJlciBhY2NvcmRpbmcgdG8gZ2RiLiAgKi8KLSAgaW50IG51bWJlcjsK LQotICAvKiBUaGUgZ2RiIGJyZWFrcG9pbnQgb2JqZWN0LCBvciBOVUxMIGlm IHRoZSBicmVha3BvaW50IGhhcyBiZWVuCi0gICAgIGRlbGV0ZWQuICAqLwot ICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnA7Ci19OwotCi0vKiBSZXF1aXJlIHRo YXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93 IGEgUHl0aG9uCi0gICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4gICov Ci0jZGVmaW5lIEJQUFlfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50KQkJCQkJ XAotICAgIGRvIHsJCQkJCQkJCVwKLSAgICAgIGlmICgoQnJlYWtwb2ludCkt PmJwID09IE5VTEwpCQkJCQlcCi0JcmV0dXJuIFB5RXJyX0Zvcm1hdCAoUHlF eGNfUnVudGltZUVycm9yLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJ CSAgICAgXygiQnJlYWtwb2ludCAlZCBpcyBpbnZhbGlkLiIpLAkJXAotCQkJ ICAgICAoQnJlYWtwb2ludCktPm51bWJlcik7CQkJXAotICAgIH0gd2hpbGUg KDApCi0KLS8qIFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQg YnJlYWtwb2ludCBJRDsgdGhyb3cgYSBQeXRob24KLSAgIGV4Y2VwdGlvbiBp ZiBpdCBpcyBpbnZhbGlkLiAgVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHNl dHRlciBmdW5jdGlvbnMuICAqLwotI2RlZmluZSBCUFBZX1NFVF9SRVFVSVJF X1ZBTElEKEJyZWFrcG9pbnQpCQkJCVwKLSAgICBkbyB7CQkJCQkJCQlcCi0g ICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKQkJCQkJXAotICAg ICAgICB7CQkJCQkJCQlcCi0JICBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRp bWVFcnJvciwgXygiQnJlYWtwb2ludCAlZCBpcyBpbnZhbGlkLiIpLCBcCi0J CQkoQnJlYWtwb2ludCktPm51bWJlcik7CQkJCVwKLQkgIHJldHVybiAtMTsJ CQkJCQkJXAotCX0JCQkJCQkJCVwKLSAgICB9IHdoaWxlICgwKQotCiAvKiBU aGlzIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB2YXJpb3VzIGdkYi5icF8qIGNv bnN0YW50cy4gICovCiBzdHJ1Y3QgcHlicF9jb2RlCiB7CkBAIC03NTMsNiAr NzE5LDIzIEBAIGdkYnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2lu dF9vYmplY3QgKmJwX29iaikKICAgcmV0dXJuIHN0b3A7CiB9CiAKKy8qIElm IFNUT1BfQlBTVEFUIGNvbnRhaW5zIGEgUHl0aG9uIGJyZWFrcG9pbnQgd2hv c2UgdHlwZSBpcyBUWVBFLCByZXR1cm5zCisgICB0aGlzIGJyZWFrcG9pbnQu IFJldHVybnMgTlVMTCBvdGhlcndpc2UuICAqLworCitzdHJ1Y3QgYnJlYWtw b2ludCAqCitnZGJweV9pc19zdG9wcGVkX2F0X2JwX3R5cGUgKGJwc3RhdCBz dG9wX2Jwc3RhdCwgZW51bSBweV9icF90eXBlIHR5cGUpCit7CisgIGJwc3Rh dCBiczsKKworICBmb3IgKGJzID0gc3RvcF9icHN0YXQ7IGJzOyBicyA9IGJz LT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChicy0+YnJlYWtwb2ludF9hdCAm JiBicy0+YnJlYWtwb2ludF9hdC0+cHlfYnBfdHlwZSA9PSB0eXBlKQorICAg ICAgICByZXR1cm4gYnMtPmJyZWFrcG9pbnRfYXQ7CisgICAgfQorCisgIHJl dHVybiBOVUxMOworfQorCiAvKiBDaGVja3MgaWYgdGhlICAic3RvcCIgbWV0 aG9kIGV4aXN0cyBpbiB0aGlzIGJyZWFrcG9pbnQuCiAgICBVc2VkIGJ5IGNv bmRpdGlvbl9jb21tYW5kIHRvIGVuc3VyZSBtdXR1YWwgZXhjbHVzaW9uIG9m IGJyZWFrcG9pbnQKICAgIGNvbmRpdGlvbnMuICAqLwpAQCAtODEzLDYgKzc5 NiwxMSBAQCBnZGJweV9icmVha3BvaW50X2NyZWF0ZWQgKHN0cnVjdCBicmVh a3BvaW50ICpicCkKICAgICAgIG5ld2JwLT5icC0+cHlfYnBfb2JqZWN0ID0g bmV3YnA7CiAgICAgICBQeV9JTkNSRUYgKG5ld2JwKTsKICAgICAgICsrYnBw eV9saXZlOworCisgICAgICBpZiAoYnBmaW5pc2hweV9pc19maW5pc2hfYnAg KChQeU9iamVjdCAqKSBuZXdicCkpCisgICAgICAgIGJwLT5weV9icF90eXBl ID0gcHlfYnBfZmluaXNoOworICAgICAgZWxzZQorICAgICAgICBicC0+cHlf YnBfdHlwZSA9IHB5X2JwX3N0YW5kYXJkOwogICAgIH0KICAgZWxzZQogICAg IHsKQEAgLTk3MSw3ICs5NTksNyBAQCBzdGF0aWMgUHlNZXRob2REZWYgYnJl YWtwb2ludF9vYmplY3RfbWV0aG9kc1tdID0KICAgeyBOVUxMIH0gLyogU2Vu dGluZWwuICAqLwogfTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBicmVha3Bv aW50X29iamVjdF90eXBlID0KK1B5VHlwZU9iamVjdCBicmVha3BvaW50X29i amVjdF90eXBlID0KIHsKICAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxMKQog ICAwLAkJCQkgIC8qb2Jfc2l6ZSovCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9u L3B5LWZpbmlzaGJyZWFrcG9pbnQuYyBiL2dkYi9weXRob24vcHktZmluaXNo YnJlYWtwb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjI2OTE4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL3B5 LWZpbmlzaGJyZWFrcG9pbnQuYwpAQCAtMCwwICsxLDQ3OCBAQAorLyogUHl0 aG9uIGludGVyZmFjZSB0byBmaW5pc2ggYnJlYWtwb2ludHMKKworICAgQ29w eXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCisKKworCisjaW5jbHVkZSAiZGVmcy5oIgor I2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJweXRob24taW50 ZXJuYWwuaCIKKyNpbmNsdWRlICJicmVha3BvaW50LmgiCisjaW5jbHVkZSAi ZnJhbWUuaCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNsdWRlICJh cmNoLXV0aWxzLmgiCisjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKKyNpbmNsdWRl ICJvYnNlcnZlci5oIgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisKK3N0YXRp YyBQeVR5cGVPYmplY3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGU7 CisKKy8qIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBQeXRob24g ZmluaXNoIGJwIGlzIGZvdW5kIG91dCBvZiBzY29wZS4gICovCitzdGF0aWMg Y2hhciAqIGNvbnN0IG91dG9mc2NvcGVfZnVuYyA9ICJvdXRfb2Zfc2NvcGUi OworCisvKiBzdHJ1Y3QgaW1wbGVtZW50aW5nIHRoZSBnZGIuRmluaXNoQnJl YWtwb2ludCBvYmplY3QgYnkgZXh0ZW5kaW5nCisgICB0aGUgZ2RiLkJyZWFr cG9pbnQgY2xhc3MuICAqLworc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29i amVjdAoreworICAvKiBnZGIuQnJlYWtwb2ludCBiYXNlIGNsYXNzLiAgKi8K KyAgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0IHB5X2JwOworICAvKiBGbGFn IGluZGljYXRpbmcgdGhhdCB0aGUgQlAgaXMgb3V0IG9mIHRoZSBjYWxsc3Rh Y2sgYW5kIFB5dGhvbiBjYWxsYmFjaworICAgICBoYXMgYmVlbiB0cmlnZ2Vy ZWQuICAqLworICBpbnQgb3V0X29mX3Njb3BlX25vdGlmOworICAvKiBUeXBl IG9mIHRoZSBmdW5jdGlvbiBmaW5pc2hlZCBieSB0aGlzIGJyZWFrcG9pbnQu ICAqLworICBzdHJ1Y3QgdHlwZSAqZnVuY3Rpb25fdHlwZTsKKyAgLyogVHlw ZSBvZiB0aGUgdmFsdWUgcmV0dXJuIGJ5IHRoZSBicmVha3BvaW50ZWQgZnVu Y3Rpb24uICAqLworICBzdHJ1Y3QgdHlwZSAqcmV0dXJuX3R5cGU7CisgIC8q IFdoZW4gc3RvcHBlZCBhdCB0aGlzIEZpbmlzaEJyZWFrcG9pbnQsIHZhbHVl IHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbjsKKyAgICAgUHlfTm9uZSBpZiB0 aGUgdmFsdWUgaXMgbm90IGNvbXB1dGFibGU7CisgICAgIE5VTEwgaWYgR0RC IGlzIG5vdCBzdG9wcGVkIGF0IGEgRmluaXNoQnJlYWtwb2ludC4gICovCisg IFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7Cit9OworCisvKiBQeXRob24gZnVu Y3Rpb24gdG8gc2V0IHRoZSAnb3V0X29mX3Njb3BlX25vdGlmJyBhdHRyaWJ1 dGUgb2YKKyAgIEZpbmlzaEJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgaW50 CiticGZpbmlzaHB5X3NldF9vdXRvZnNjb3BlX25vdGlmIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKm5ld3ZhbHVlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkKK3sKKyAgc3RydWN0IGZp bmlzaF9icmVha3BvaW50X29iamVjdCAqc2VsZl9maW5pc2hicCA9CisgICAg ICAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqKSBzZWxmOwor ICBpbnQgY21wOworCisgIEJQUFlfU0VUX1JFUVVJUkVfVkFMSUQgKCZzZWxm X2ZpbmlzaGJwLT5weV9icCk7CisKKyAgaWYgKG5ld3ZhbHVlID09IE5VTEwp CisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJy b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJDYW5ub3QgZGVs ZXRlIGBvdXRfb2Zfc2NvcGVfbm90aWYnIGF0dHJpYnV0ZS4iKSk7CisgICAg ICByZXR1cm4gLTE7CisgICAgfQorICBlbHNlIGlmICghUHlCb29sX0NoZWNr IChuZXd2YWx1ZSkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQ eUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIF8oIlRoZSB2 YWx1ZSBvZiBgb3V0X29mX3Njb3BlX25vdGlmJyBtdXN0IGJlIGEgYm9vbGVh bi4iKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGNtcCA9IFB5 T2JqZWN0X0lzVHJ1ZSAobmV3dmFsdWUpOworICBpZiAoY21wIDwgMCkKKyAg ICByZXR1cm4gLTE7CisgIGVsc2UKKyAgICBzZWxmX2ZpbmlzaGJwLT5vdXRf b2Zfc2NvcGVfbm90aWYgPSBjbXA7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8q IFB5dGhvbiBmdW5jdGlvbiB0byB1cGRhdGUgYW5kIGdldCB0aGUgJ291dF9v Zl9zY29wZV9ub3RpZicKKyAgIGF0dHJpYnV0ZSBvZiBGaW5pc2hCcmVha3Bv aW50LiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2JwZmluaXNocHlfZ2V0 X291dG9mc2NvcGVfbm90aWYgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9z dXJlKQoreworICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpz ZWxmX2ZpbmlzaGJwID0KKyAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9p bnRfb2JqZWN0ICopIHNlbGY7CisKKyAgQlBQWV9SRVFVSVJFX1ZBTElEICgm c2VsZl9maW5pc2hicC0+cHlfYnApOworCisgIGlmIChzZWxmX2ZpbmlzaGJw LT5vdXRfb2Zfc2NvcGVfbm90aWYpCisgICAgUHlfUkVUVVJOX1RSVUU7Cisg IFB5X1JFVFVSTl9GQUxTRTsKK30KKworLyogVHJpZ2dlcmVkIHdoZW4gR0RC IHN0b3BzIGF0IFBZX0JQLiBEaXNhYmxlIGBvdXRfb2Zfc2NvcGUnIG5vdGlm aWNhdGlvbnMKKyAgIGFuZCwgaWYgcG9zc2libGUsIGNvbXB1dGVzIGFuZCBj YWNoZXMgdGhlIGByZXR1cm5fdmFsdWUnLiAgKi8KKworc3RhdGljIHZvaWQK K2JwZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2JwIChzdHJ1Y3QgZmluaXNo X2JyZWFrcG9pbnRfb2JqZWN0ICpweV9icCkKK3sKKyAgcHlfYnAtPm91dF9v Zl9zY29wZV9ub3RpZiA9IDA7CisKKyAgaWYgKHB5X2JwLT5yZXR1cm5fdHlw ZSkKKyAgICB7CisgICAgICBzdHJ1Y3QgdmFsdWUgKnJldCA9IGdldF9yZXR1 cm5fdmFsdWUgKHB5X2JwLT5mdW5jdGlvbl90eXBlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweV9icC0+cmV0dXJu X3R5cGUpOworICAgICAgaWYgKHJldCkKKyAgICAgICAgeworICAgICAgICAg IHB5X2JwLT5yZXR1cm5fdmFsdWUgPSB2YWx1ZV90b192YWx1ZV9vYmplY3Qg KHJldCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcHlfYnAt PnJldHVybl92YWx1ZSA9IFB5X05vbmU7CisgICAgfQorfQorCisvKiBQeXRo b24gZnVuY3Rpb24gdG8gZ2V0IHRoZSAncmV0dXJuX3ZhbHVlJyBhdHRyaWJ1 dGUgb2YKKyAgIEZpbmlzaEJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgUHlP YmplY3QgKgorYnBmaW5pc2hweV9nZXRfcmV0dXJudmFsdWUgKFB5T2JqZWN0 ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoreworICBzdHJ1Y3QgZmluaXNoX2Jy ZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2ZpbmlzaGJwID0KKyAgICAgIChzdHJ1 Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisKKyAgQlBQ WV9SRVFVSVJFX1ZBTElEICgmc2VsZl9maW5pc2hicC0+cHlfYnApOworCisg IGlmIChzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdHlwZSA9PSBOVUxMKQorICAg IFB5X1JFVFVSTl9OT05FOworCisgIC8qIENoZWNrIGlmIHdlIGhhdmUgYSBj YWNoZWQgdmFsdWUuICAqLworICBpZiAoIXNlbGZfZmluaXNoYnAtPnJldHVy bl92YWx1ZSkKKyAgICB7CisgICAgICBicHN0YXQgYnM7CisKKyAgICAgIGZv ciAoYnMgPSBpbmZlcmlvcl90aHJlYWQgKCktPmNvbnRyb2wuc3RvcF9icHN0 YXQ7CisgICAgICAgICAgYnM7IGJzID0gYnMtPm5leHQpCisgICAgICAgIHsK KyAgICAgICAgICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnAgPSBicy0+YnJlYWtw b2ludF9hdDsKKworICAgICAgICAgIGlmIChicCAhPSBOVUxMICYmIChQeU9i amVjdCAqKSBicC0+cHlfYnBfb2JqZWN0ID09IHNlbGYpCisgICAgICAgICAg ICAgIGJwZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2JwIChzZWxmX2Zpbmlz aGJwKTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoIXNlbGZfZmluaXNo YnAtPnJldHVybl92YWx1ZSkKKyAgICBQeV9SRVRVUk5fTk9ORTsKKworICBQ eV9JTkNSRUYgKHNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSk7CisgIHJl dHVybiBzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWU7Cit9CisKKy8qIENh bGxlZCB3aGVuIEdEQiBub3RpY2VzIHRoYXQgdGhlIGZpbmlzaCBicmVha3Bv aW50IEJQX09CSiBpcyBvdXQgb2YgCisgICB0aGUgY3VycmVudCBjYWxsc3Rh Y2suIElmIEJQX09CSiBoYXMgdGhlIGF0dHJpYnV0ZSBPVVRfT0ZfU0NPUEVf Tk9USUYKKyAgIGFuZCBpdHMgdmFsdWUgaXMgRkFMU0UsIHRyaWdnZXIgdGhl IG1ldGhvZCBPVVRfT0ZfU0NPUEUgYW5kIHNldCB0aGUgZmxhZworICAgdG8g VFJVRS4gICovCisKK3N0YXRpYyB2b2lkCitnZGJweV9vdXRfb2Zfc2NvcGUg KHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmJwZmluaXNoX29i aikKK3sKKyAgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaiA9IChicmVha3Bv aW50X29iamVjdCAqKSBicGZpbmlzaF9vYmo7CisgIFB5T2JqZWN0ICpweV9v YmogPSAoUHlPYmplY3QgKikgYnBfb2JqOworICAKKyAgYnBmaW5pc2hfb2Jq LT5vdXRfb2Zfc2NvcGVfbm90aWYgPSAwOworCisgIGlmIChQeU9iamVjdF9I YXNBdHRyU3RyaW5nIChweV9vYmosIG91dG9mc2NvcGVfZnVuYykpCisgICAg eworICAgICAgaWYgKCFQeU9iamVjdF9DYWxsTWV0aG9kIChweV9vYmosIG91 dG9mc2NvcGVfZnVuYywgTlVMTCkpCisgICAgICAgICAgZ2RicHlfcHJpbnRf c3RhY2sgKCk7CisgICAgfQorfQorCisvKiBQeXRob24gZnVuY3Rpb24gdG8g Y2hlY2sgaWYgdGhlIEZpbmlzaEJyZWFrcG9pbnQgU0VMRiBpcyBub3QgYW55 bW9yZQorICAgaW4gdGhlIGNhbGxzdGFjay4gVHJpZ2dlcnMgc2VsZi0+b3V0 X29mX3Njb3BlIGlmIG5lY2Vzc2FyeS4gICovCisKK3N0YXRpYyBQeU9iamVj dCAqCiticGZpbmlzaHB5X2NoZWNrX3Njb3BlIChQeU9iamVjdCAqc2VsZiwg UHlPYmplY3QgKmFyZ3MpCit7CisgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2lu dF9vYmplY3QgKnNlbGZfZmluaXNoYnAgPQorICAgICAgKHN0cnVjdCBmaW5p c2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKworICBpZiAoc2VsZl9m aW5pc2hicC0+b3V0X29mX3Njb3BlX25vdGlmCisgICAgICAmJiBmcmFtZV9m aW5kX2J5X2lkIChzZWxmX2ZpbmlzaGJwLT5weV9icC5icC0+ZnJhbWVfaWQp ID09IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfb3V0X29mX3Njb3BlIChz ZWxmX2ZpbmlzaGJwKTsKKworICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAg fQorICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKKy8qIFB5dGhvbiBmdW5jdGlv biB0byBjcmVhdGUgYSBuZXcgYnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBp bnQKK2JwZmluaXNocHlfaW5pdCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0 ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICBzdGF0aWMgY2hhciAq a2V5d29yZHNbXSA9IHsgImZyYW1lIiwgImludGVybmFsIiwgTlVMTCB9Owor ICBicmVha3BvaW50X29iamVjdCAqc2VsZl9icCA9IChicmVha3BvaW50X29i amVjdCAqKSBzZWxmOworICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2Jq ZWN0ICpzZWxmX2JwZmluaXNoID0KKyAgICAgIChzdHJ1Y3QgZmluaXNoX2Jy ZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIGludCB0eXBlID0gYnBfYnJl YWtwb2ludDsKKyAgUHlPYmplY3QgKmZyYW1lX29iaiA9IE5VTEw7CisgIHN0 cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwgKnByZXZfZnJhbWU7CisgIHN0cnVj dCBmcmFtZV9pZCBmcmFtZV9pZDsKKyAgUHlPYmplY3QgKmludGVybmFsID0g TlVMTDsKKyAgaW50IGludGVybmFsX2JwID0gMDsKKyAgQ09SRV9BRERSIGZp bmlzaF9wYywgcGM7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9u IGV4Y2VwdDsKKyAgY2hhciAqYWRkcl9zdHIsIHNtYWxsX2J1ZlsxMDBdOwor ICBzdHJ1Y3Qgc3ltYm9sICpmdW5jdGlvbjsKKworICBpZiAoISBQeUFyZ19Q YXJzZVR1cGxlQW5kS2V5d29yZHMgKGFyZ3MsIGt3YXJncywgIk98TyIsIGtl eXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZmcmFtZV9vYmosICZpbnRlcm5hbCkpCisgICAgcmV0dXJuIC0xOworCisg IGlmICghZnJhbWVfb2JqKQorICAgIGdvdG8gaW52YWxpZF9mcmFtZTsKKyAg CisgIGZyYW1lID0gZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKGZyYW1l X29iaik7CisgIGlmIChmcmFtZSA9PSBOVUxMKQorICAgIGdvdG8gaW52YWxp ZF9mcmFtZTsKKyAgCisgIHByZXZfZnJhbWUgPSBnZXRfcHJldl9mcmFtZSAo ZnJhbWUpOworICBpZiAocHJldl9mcmFtZSA9PSAwKQorICAgIHsKKyAgICAg IFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwgCisgICAgICAg ICAgIF8oIlwiRmluaXNoQnJlYWtwb2ludFwiIG5vdCBtZWFuaW5nZnVsIGlu IHRoZSBvdXRlcm1vc3QgZnJhbWUuIikpOworICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKyAgCisgIGZyYW1lX2lkID0gZ2V0X2ZyYW1lX2lkIChwcmV2X2Zy YW1lKTsKKyAgaWYgKGZyYW1lX2lkX2VxIChmcmFtZV9pZCwgbnVsbF9mcmFt ZV9pZCkpCisgICAgZ290byBpbnZhbGlkX2ZyYW1lOworCisgIGlmIChpbnRl cm5hbCkKKyAgICB7CisgICAgICBpbnRlcm5hbF9icCA9IFB5T2JqZWN0X0lz VHJ1ZSAoaW50ZXJuYWwpOworICAgICAgaWYgKGludGVybmFsX2JwID09IC0x KSAKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlF eGNfVmFsdWVFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBf KCJUaGUgdmFsdWUgb2YgYGludGVybmFsJyBtdXN0IGJlIGEgYm9vbGVhbi4i KSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQor CisgIC8qIEZpbmQgdGhlIGZ1bmN0aW9uIHdlIHdpbGwgcmV0dXJuIGZyb20u ICAqLworICBpZiAoZ2V0X2ZyYW1lX3BjX2lmX2F2YWlsYWJsZSAoZnJhbWUs ICZwYykpCisgICAgeworICAgICAgZnVuY3Rpb24gPSBmaW5kX3BjX2Z1bmN0 aW9uIChwYyk7CisgICAgICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9 IFRZUEVfVEFSR0VUX1RZUEUgKFNZTUJPTF9UWVBFIChmdW5jdGlvbikpOwor CisgICAgICAvKiBSZW1lbWJlciBvbmx5IG5vbi1WT0lEIHJldHVybiB0eXBl cy4gICovCisgICAgICBpZiAoVFlQRV9DT0RFIChzZWxmX2JwZmluaXNoLT5y ZXR1cm5fdHlwZSkgIT0gVFlQRV9DT0RFX1ZPSUQpCisgICAgICAgIHsKKyAg ICAgICAgICBzZWxmX2JwZmluaXNoLT5mdW5jdGlvbl90eXBlID0gU1lNQk9M X1RZUEUgKGZ1bmN0aW9uKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAg ICAgICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IE5VTEw7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgc2VsZl9icGZpbmlzaC0+cmV0dXJu X3R5cGUgPSBOVUxMOworICAgICAgc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25f dHlwZSA9IE5VTEw7CisgICAgfQorCisgIGJwcHlfcGVuZGluZ19vYmplY3Qg PSBzZWxmX2JwOworICBicHB5X3BlbmRpbmdfb2JqZWN0LT5udW1iZXIgPSAt MTsKKyAgYnBweV9wZW5kaW5nX29iamVjdC0+YnAgPSBOVUxMOworCisgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAg ICAgLyogU2V0IGEgYnJlYWtwb2ludCBvbiB0aGUgcmV0dXJuIGFkZHJlc3Mu ICAqLworICAgICAgZmluaXNoX3BjID0gZ2V0X2ZyYW1lX3BjIChwcmV2X2Zy YW1lKTsKKyAgICAgIHNwcmludGYgKHNtYWxsX2J1ZiwgIiolcyIsIGhleF9z dHJpbmcgKGZpbmlzaF9wYykpOworICAgICAgYWRkcl9zdHIgPSBzbWFsbF9i dWY7CisKKyAgICAgIGNyZWF0ZV9icmVha3BvaW50IChweXRob25fZ2RiYXJj aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3N0ciwgTlVMTCwg LTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAwLCBicF9icmVha3BvaW50LAorICAgICAgICAgICAg ICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgQVVU T19CT09MRUFOX1RSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgMCwgMSwgaW50ZXJuYWxfYnApOworICAgIH0KKyAgaWYgKGV4Y2VwdC5y ZWFzb24gPCAwKQorICAgIHsKKyAgICAgIFB5RXJyX0Zvcm1hdCAoZXhjZXB0 LnJlYXNvbiA9PSBSRVRVUk5fUVVJVAorICAgICAgICAgICAgICAgICAgICA/ IFB5RXhjX0tleWJvYXJkSW50ZXJydXB0IDogUHlFeGNfUnVudGltZUVycm9y LAorICAgICAgICAgICAgICAgICAgICAiJXMiLCBleGNlcHQubWVzc2FnZSk7 CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICBCUFBZX1NFVF9SRVFVSVJF X1ZBTElEIChzZWxmX2JwKTsKKyAgCisgIHNlbGZfYnAtPmJwLT5mcmFtZV9p ZCA9IGZyYW1lX2lkOworICAKKyAgc2VsZl9icGZpbmlzaC0+b3V0X29mX3Nj b3BlX25vdGlmID0gMTsKKyAgCisgIHJldHVybiAwOworICAKKyBpbnZhbGlk X2ZyYW1lOgorICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3Is IAorICAgICAgICAgICAgICAgICAgIF8oIkludmFsaWQgSUQgZm9yIHRoZSBg ZnJhbWUnIG9iamVjdC4iKSk7CisgIHJldHVybiAtMTsKK30KKworLyogUmV0 dXJucyAxIGlmIE9CSiBpcyBub3QgTlVMTCBhbmQgcmVmZXJlbmNlcyBhIEZp bmlzaEJyZWFrcG9pbnQgb2JqZWN0LiAgKi8KKworaW50CiticGZpbmlzaHB5 X2lzX2ZpbmlzaF9icCAoUHlPYmplY3QgKm9iaikKK3sKKyAgcmV0dXJuIG9i aiAhPSBOVUxMCisgICAgICAgICAmJiBQeU9iamVjdF9UeXBlQ2hlY2sgKG9i aiwgJmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlKTsKK30KKworLyog Q2FsbGJhY2sgZm9yIGBicGZpbmlzaHB5X2RldGVjdF9vdXRfc2NvcGUnLiAg VHJpZ2dlcnMgUHl0aG9uJ3MKKyAgIGBCLT5vdXRfb2Zfc2NvcGUnIGZ1bmN0 aW9uIGlmIEIgaXMgYSBGaW5pc2hCcmVha3BvaW50IG91dCBvZiBpdHMKKyAg ICBzY29wZSBvciB0dXJuIG9mIG91dF9vZl9zY29wZSBub3RpZmljYXRpb24g aWYgQiBoYXMgYmVlbiBoaXQuICAqLworCitzdGF0aWMgaW50CiticGZpbmlz aHB5X2RldGVjdF9vdXRfc2NvcGVfY2IgKHN0cnVjdCBicmVha3BvaW50ICpi LCB2b2lkICphcmdzKQoreworICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnBfc3Rv cHBlZCA9IChzdHJ1Y3QgYnJlYWtwb2ludCAqKSBhcmdzOworICBQeU9iamVj dCAqcHlfYnAgPSAoUHlPYmplY3QgKikgYi0+cHlfYnBfb2JqZWN0OworICBz dHJ1Y3QgZ2RiYXJjaCAqZ2FyY2ggPSBiLT5nZGJhcmNoID8gYi0+Z2RiYXJj aCA6IGdldF9jdXJyZW50X2FyY2ggKCk7CisgIHN0cnVjdCBjbGVhbnVwICpj bGVhbnVwID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdhcmNoLCBjdXJyZW50X2xh bmd1YWdlKTsKKyAgCisgIC8qIFRyaWdnZXIgb3V0X29mX3Njb3BlIGlmIHRo aXMgaXMgYSBGaW5pc2hCcmVha3BvaW50IGl0cyBmcmFtZSBpcyBub3QgaW4g dGhlCisgICAgIGN1cnJlbnQgY2FsbHN0YWNrIGFuZCB0aGUgbm90aWZpY2F0 aW9uIGhhcyBub3QgYmVlbiBzZW50IHlldC4gICovCisgIGlmIChicGZpbmlz aHB5X2lzX2ZpbmlzaF9icCAocHlfYnApKQorICAgIHsKKyAgICAgIHN0cnVj dCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmZpbmlzaF9icCA9CisgICAg ICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgcHlf YnA7CisKKyAgICAgIGlmIChiID09IGJwX3N0b3BwZWQpCisgICAgICAgIGJw ZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2JwIChmaW5pc2hfYnApOworICAg ICAgZWxzZSBpZiAoZnJhbWVfZmluZF9ieV9pZChiLT5mcmFtZV9pZCkgPT0g TlVMTAorICAgICAgICAgICAmJiBmaW5pc2hfYnAtPm91dF9vZl9zY29wZV9u b3RpZikKKyAgICAgICAgeworICAgICAgICAgIGdkYnB5X291dF9vZl9zY29w ZSAoZmluaXNoX2JwKTsKKyAgICAgICAgfQorICAgIH0KKyAgCisgIGRvX2Ns ZWFudXBzIChjbGVhbnVwKTsKKyAgCisgIHJldHVybiAwOworfQorCisvKiBB dHRhY2hlZCB0byBgc3RvcCcgbm90aWZpY2F0aW9ucywgY2hlY2sgaWYgdGhl IGV4ZWN1dGlvbiBoYXMgcnVuIG91dAorICAgb3V0IG9mIHRoZSBzY29wZSBv ZiBhbnkgRmluaXNoQnJlYWtwb2ludCBiZWZvcmUgaXQgaGFzIGJlZW4gaGl0 LiAgKi8KKworc3RhdGljIHZvaWQKK2JwZmluaXNocHlfaGFuZGxlX3N0b3Ag KHN0cnVjdCBicHN0YXRzICpicywgaW50IHByaW50X2ZyYW1lKQoreworICBp dGVyYXRlX292ZXJfYnJlYWtwb2ludHMgKGJwZmluaXNocHlfZGV0ZWN0X291 dF9zY29wZV9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicyA9 PSBOVUxMID8gTlVMTCA6IGJzLT5icmVha3BvaW50X2F0KTsKK30KKworLyog QXR0YWNoZWQgdG8gYGV4aXQnIG5vdGlmaWNhdGlvbnMsIHRyaWdnZXJzIGFs bCB0aGUgbmVjZXNzYXJ5IG91dCBvZgorICAgc2NvcGUgbm90aWZpY2F0aW9u cy4gICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5X2hhbmRsZV9leGl0 IChzdHJ1Y3QgaW5mZXJpb3IgKmluZikKK3sKKyAgaXRlcmF0ZV9vdmVyX2Jy ZWFrcG9pbnRzIChicGZpbmlzaHB5X2RldGVjdF9vdXRfc2NvcGVfY2IsIE5V TEwpOworfQorCisvKiBDYWxsYmFjayB0byB0aGUgYnBmaW5pc2hweV9oYW5k bGVfcmVzdW1lIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIGludAorYnBmaW5p c2hweV9oYW5kbGVfcmVzdW1lX2NiIChzdHJ1Y3QgYnJlYWtwb2ludCAqYiwg dm9pZCAqYXJncykKK3sKKyAgaWYgKGJwZmluaXNocHlfaXNfZmluaXNoX2Jw ICgoUHlPYmplY3QgKikgYi0+cHlfYnBfb2JqZWN0KSkKKyAgICB7CisgICAg ICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpmaW5pc2hfYnAg PQorICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFr cG9pbnRfb2JqZWN0ICopIGItPnB5X2JwX29iamVjdDsKKyAgICAgIFB5X1hE RUNSRUYgKGZpbmlzaF9icC0+cmV0dXJuX3ZhbHVlKTsKKyAgICAgIGZpbmlz aF9icC0+cmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB9CisgIHJldHVybiAw OworfQorCisvKiBBdHRhY2hlZCB0byBgdGFyZ2V0X3Jlc3VtZScgbm90aWZp Y2F0aW9ucywgcmVzZXRzIHRoZSBgcmV0dXJuX3ZhbHVlJworICAgY2FjaGUu ICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9oYW5kbGVfcmVzdW1l IChwdGlkX3QgcHRpZCkKK3sKKyAgaXRlcmF0ZV9vdmVyX2JyZWFrcG9pbnRz IChicGZpbmlzaHB5X2hhbmRsZV9yZXN1bWVfY2IsIE5VTEwpOworfQorCisv KiBJbml0aWFsaXplIHRoZSBQeXRob24gZmluaXNoIGJyZWFrcG9pbnQgY29k ZS4gICovCisKK3ZvaWQKK2dkYnB5X2luaXRpYWxpemVfZmluaXNoYnJlYWtw b2ludHMgKHZvaWQpCit7CisgIGlmIChQeVR5cGVfUmVhZHkgKCZmaW5pc2hf YnJlYWtwb2ludF9vYmplY3RfdHlwZSkgPCAwKQorICAgICAgcmV0dXJuOwor ICAKKyAgUHlfSU5DUkVGICgmZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5 cGUpOworICBQeU1vZHVsZV9BZGRPYmplY3QgKGdkYl9tb2R1bGUsICJGaW5p c2hCcmVha3BvaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAoUHlPYmpl Y3QgKikgJmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlKTsKKyAgICAK KyAgb2JzZXJ2ZXJfYXR0YWNoX25vcm1hbF9zdG9wIChicGZpbmlzaHB5X2hh bmRsZV9zdG9wKTsKKyAgb2JzZXJ2ZXJfYXR0YWNoX2luZmVyaW9yX2V4aXQg KGJwZmluaXNocHlfaGFuZGxlX2V4aXQpOworICBvYnNlcnZlcl9hdHRhY2hf dGFyZ2V0X3Jlc3VtZWQgKGJwZmluaXNocHlfaGFuZGxlX3Jlc3VtZSk7Cit9 CisKK3N0YXRpYyBQeU1ldGhvZERlZiBmaW5pc2hfYnJlYWtwb2ludF9vYmpl Y3RfbWV0aG9kc1tdID0geworICB7ICJjaGVja19zY29wZSIsIGJwZmluaXNo cHlfY2hlY2tfc2NvcGUsIE1FVEhfTk9BUkdTLAorICAgICJjaGVja19zY29w ZSAoKSAtPiBCb29sZWFuLlxuXAorUmV0dXJuIHRydWUgaWYgb3V0X29mX3Nj b3BlICgpIGhhcyBiZWVuIHRyaWdnZXJlZCwgZmFsc2UgaWYgbm90LiIgfSwK KyAge05VTEx9ICAvKiBTZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5R2V0 U2V0RGVmIGZpbmlzaF9icmVha3BvaW50X29iamVjdF9nZXRzZXRbXSA9IHsK KyAgeyAib3V0X29mX3Njb3BlX25vdGlmIiwgYnBmaW5pc2hweV9nZXRfb3V0 b2ZzY29wZV9ub3RpZiwgYnBmaW5pc2hweV9zZXRfb3V0b2ZzY29wZV9ub3Rp ZiwKKyAgICAiQm9vbGVhbiB0ZWxsaW5nIHdoZXRoZXIgdGhlIGJyZWFrcG9p bnQgaXMgc3RpbGwgd2l0aGluIHRoZSBzY29wZSBcCitvZiB0aGUgY3VycmVu dCBjYWxsc3RhY2suIiwgTlVMTCB9LAorICB7ICJyZXR1cm5fdmFsdWUiLCBi cGZpbmlzaHB5X2dldF9yZXR1cm52YWx1ZSwgTlVMTCwKKyAgImdkYi5WYWx1 ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXR1cm4gdmFsdWUsIGlmIGFu eS4gXAorTm9uZSBvdGhlcndpc2UuIiwgTlVMTCB9LAorICAgIHsgTlVMTCB9 ICAvKiBTZW50aW5lbC4gICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0 IGZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlID0KK3sKKyAgUHlPYmpl Y3RfSEVBRF9JTklUIChOVUxMKQorICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qb2Jfc2l6ZSovCisgICJnZGIuRmluaXNoQnJlYWtwb2lu dCIsICAgICAgICAgLyp0cF9uYW1lKi8KKyAgc2l6ZW9mIChzdHJ1Y3QgZmlu aXNoX2JyZWFrcG9pbnRfb2JqZWN0KSwgIC8qdHBfYmFzaWNzaXplKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXpl Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rl YWxsb2MqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q dHBfcHJpbnQqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qdHBfZ2V0YXR0ciovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKnRwX2NvbXBhcmUqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFw cGluZyovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0 cF9oYXNoICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Lyp0cF9jYWxsKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKnRwX3N0ciovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyp0cF9nZXRhdHRybyovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyp0cF9zZXRhdHRybyAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgUHlfVFBGTEFH U19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3Mq LworICAiR0RCIGZpbmlzaCBicmVha3BvaW50IG9iamVjdCIsIC8qIHRwX2Rv YyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X3RyYXZlcnNlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfY2xlYXIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0 ZXJuZXh0ICovCisgIGZpbmlzaF9icmVha3BvaW50X29iamVjdF9tZXRob2Rz LCAgLyogdHBfbWV0aG9kcyAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgZmluaXNoX2JyZWFrcG9p bnRfb2JqZWN0X2dldHNldCwvKiB0cF9nZXRzZXQgKi8KKyAgJmJyZWFrcG9p bnRfb2JqZWN0X3R5cGUsICAgICAgICAvKiB0cF9iYXNlICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dl dCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2Rlc2NyX3NldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgYnBmaW5pc2hweV9pbml0LCAg ICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgMCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CmRpZmYg LS1naXQgYS9nZGIvcHl0aG9uL3B5LWZyYW1lLmMgYi9nZGIvcHl0aG9uL3B5 LWZyYW1lLmMKaW5kZXggZDcxMjhhOS4uMjEwOWM3MyAxMDA2NDQKLS0tIGEv Z2RiL3B5dGhvbi9weS1mcmFtZS5jCisrKyBiL2dkYi9weXRob24vcHktZnJh bWUuYwpAQCAtNjAsOSArNjAsMTAgQEAgc3RhdGljIFB5VHlwZU9iamVjdCBm cmFtZV9vYmplY3RfdHlwZTsKICAgIG9iamVjdC4gIElmIHRoZSBmcmFtZSBk b2Vzbid0IGV4aXN0IGFueW1vcmUgKHRoZSBmcmFtZSBpZCBkb2Vzbid0CiAg ICBjb3JyZXNwb25kIHRvIGFueSBmcmFtZSBpbiB0aGUgaW5mZXJpb3IpLCBy ZXR1cm5zIE5VTEwuICAqLwogCi1zdGF0aWMgc3RydWN0IGZyYW1lX2luZm8g KgotZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKGZyYW1lX29iamVjdCAq ZnJhbWVfb2JqKQorc3RydWN0IGZyYW1lX2luZm8gKgorZnJhbWVfb2JqZWN0 X3RvX2ZyYW1lX2luZm8gKFB5T2JqZWN0ICpvYmopCiB7CisgIGZyYW1lX29i amVjdCAqZnJhbWVfb2JqID0gKGZyYW1lX29iamVjdCAqKSBvYmo7ICAKICAg c3RydWN0IGZyYW1lX2luZm8gKmZyYW1lOwogCiAgIGZyYW1lID0gZnJhbWVf ZmluZF9ieV9pZCAoZnJhbWVfb2JqLT5mcmFtZV9pZCk7CkBAIC0xMDMsNyAr MTA0LDcgQEAgZnJhcHlfaXNfdmFsaWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9i amVjdCAqYXJncykKIHsKICAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lOwog Ci0gIGZyYW1lID0gZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKChmcmFt ZV9vYmplY3QgKikgc2VsZik7CisgIGZyYW1lID0gZnJhbWVfb2JqZWN0X3Rv X2ZyYW1lX2luZm8gKHNlbGYpOwogICBpZiAoZnJhbWUgPT0gTlVMTCkKICAg ICBQeV9SRVRVUk5fRkFMU0U7CiAKQEAgLTEyNCw3ICsxMjUsNyBAQCBmcmFw eV9uYW1lIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAg VFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0g ICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNl bGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYs IGZyYW1lKTsKIAogICAgICAgZmluZF9mcmFtZV9mdW5uYW1lIChmcmFtZSwg Jm5hbWUsICZsYW5nLCBOVUxMKTsKICAgICB9CkBAIC0xNTMsNyArMTU0LDcg QEAgZnJhcHlfdHlwZSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdz KQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAg ICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVj dCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElE IChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHR5cGUgPSBnZXRfZnJhbWVfdHlw ZSAoZnJhbWUpOwogICAgIH0KQEAgLTE3NCw3ICsxNzUsNyBAQCBmcmFweV91 bndpbmRfc3RvcF9yZWFzb24gKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq YXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxM KQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9v YmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoc2VsZiwgZnJhbWUpOwogICAgIH0KICAgR0RCX1BZX0hBTkRMRV9F WENFUFRJT04gKGV4Y2VwdCk7CiAKQEAgLTE5NSw3ICsxOTYsNyBAQCBmcmFw eV9wYyAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxm LCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBm cmFtZSk7CiAKICAgICAgIHBjID0gZ2V0X2ZyYW1lX3BjIChmcmFtZSk7CiAg ICAgfQpAQCAtMjE2LDcgKzIxNyw3IEBAIGZyYXB5X2Jsb2NrIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKICAgICAg IGJsb2NrID0gZ2V0X2ZyYW1lX2Jsb2NrIChmcmFtZSwgTlVMTCk7CiAgICAg fQogICBHREJfUFlfSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0KTsKQEAgLTI1 Nyw3ICsyNTgsNyBAQCBmcmFweV9mdW5jdGlvbiAoUHlPYmplY3QgKnNlbGYs IFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRV Uk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJ RCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQ WV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHN5bSA9 IGZpbmRfcGNfZnVuY3Rpb24gKGdldF9mcmFtZV9hZGRyZXNzX2luX2Jsb2Nr IChmcmFtZSkpOwogICAgIH0KQEAgLTMxOSw3ICszMjAsNyBAQCBmcmFweV9v bGRlciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxm LCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBm cmFtZSk7CiAKICAgICAgIHByZXYgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUp OwogICAgICAgaWYgKHByZXYpCkBAIC0zNDgsNyArMzQ5LDcgQEAgZnJhcHlf bmV3ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBU UllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2Vs ZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwg ZnJhbWUpOwogCiAgICAgICBuZXh0ID0gZ2V0X25leHRfZnJhbWUgKGZyYW1l KTsKICAgICAgIGlmIChuZXh0KQpAQCAtMzc3LDcgKzM3OCw3IEBAIGZyYXB5 X2ZpbmRfc2FsIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAK ICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7 Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICop IHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNl bGYsIGZyYW1lKTsKIAogICAgICAgZmluZF9mcmFtZV9zYWwgKGZyYW1lLCAm c2FsKTsKICAgICAgIHNhbF9vYmogPSBzeW10YWJfYW5kX2xpbmVfdG9fc2Fs X29iamVjdCAoc2FsKTsKQEAgLTQzMyw3ICs0MzQsNyBAQCBmcmFweV9yZWFk X3ZhciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgICAg ICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogCXsKLQkg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwg ZnJhbWUpOworCSAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUp OwogCiAJICBpZiAoIWJsb2NrKQogCSAgICBibG9jayA9IGdldF9mcmFtZV9i bG9jayAoZnJhbWUsIE5VTEwpOwpAQCAtNDYxLDcgKzQ2Miw3IEBAIGZyYXB5 X3JlYWRfdmFyIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAK ICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7 Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICop IHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNl bGYsIGZyYW1lKTsKIAogICAgICAgdmFsID0gcmVhZF92YXJfdmFsdWUgKHZh ciwgZnJhbWUpOwogICAgIH0KQEAgLTQ4NCwxMiArNDg1LDExIEBAIHN0YXRp YyBQeU9iamVjdCAqCiBmcmFweV9zZWxlY3QgKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqYXJncykKIHsKICAgc3RydWN0IGZyYW1lX2luZm8gKmZpOwot ICBmcmFtZV9vYmplY3QgKmZyYW1lID0gKGZyYW1lX29iamVjdCAqKSBzZWxm OwogICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CiAK ICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7 Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChmcmFtZSwgZmkpOworICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZmkpOwogCiAgICAgICBz ZWxlY3RfZnJhbWUgKGZpKTsKICAgICB9CmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5dGhvbi1pbnRlcm5hbC5oIGIvZ2RiL3B5dGhvbi9weXRob24taW50 ZXJuYWwuaAppbmRleCBkM2NiNzg4Li5lNDA0YTMyIDEwMDY0NAotLS0gYS9n ZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCisrKyBiL2dkYi9weXRob24v cHl0aG9uLWludGVybmFsLmgKQEAgLTExNCw5ICsxMTQsNDcgQEAgZXh0ZXJu IFB5VHlwZU9iamVjdCBzeW1ib2xfb2JqZWN0X3R5cGU7CiBleHRlcm4gUHlU eXBlT2JqZWN0IGV2ZW50X29iamVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9i amVjdCBldmVudHNfb2JqZWN0X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0 IHN0b3BfZXZlbnRfb2JqZWN0X3R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0 IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IGJy ZWFrcG9pbnRfb2JqZWN0Cit7CisgIFB5T2JqZWN0X0hFQUQKKworICAvKiBU aGUgYnJlYWtwb2ludCBudW1iZXIgYWNjb3JkaW5nIHRvIGdkYi4gICovCisg IGludCBudW1iZXI7CisKKyAgLyogVGhlIGdkYiBicmVha3BvaW50IG9iamVj dCwgb3IgTlVMTCBpZiB0aGUgYnJlYWtwb2ludCBoYXMgYmVlbgorICAgICBk ZWxldGVkLiAgKi8KKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJwOworfSBicmVh a3BvaW50X29iamVjdDsKKworLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQg YmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgorICAg ZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICAqLworI2RlZmluZSBCUFBZ X1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgaWYgKChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1 cm4gUHlFcnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfKCJCcmVha3BvaW50ICVkIGlzIGludmFsaWQuIiksICAgICAgICAgICAg XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQnJlYWtwb2ludCkt Pm51bWJlcik7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUg KDApCisKKy8qIFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQg YnJlYWtwb2ludCBJRDsgdGhyb3cgYSBQeXRob24KKyAgIGV4Y2VwdGlvbiBp ZiBpdCBpcyBpbnZhbGlkLiAgVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHNl dHRlciBmdW5jdGlvbnMuICAqLworI2RlZmluZSBCUFBZX1NFVF9SRVFVSVJF X1ZBTElEKEJyZWFrcG9pbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYg KChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgIFB5RXJyX0Zvcm1hdCAoUHlFeGNfUnVudGltZUVy cm9yLCBfKCJCcmVha3BvaW50ICVkIGlzIGludmFsaWQuIiksIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICByZXR1cm4gLTE7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9 IHdoaWxlICgwKQorCisKKy8qIFZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5m b3JtYXRpb24gYmV0d2VlbiB0aGUgQnJlYWtwb2ludAorICAgY29uc3RydWN0 b3IgYW5kIHRoZSBicmVha3BvaW50LWNyZWF0ZWQgaG9vayBmdW5jdGlvbi4g ICovCitleHRlcm4gYnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19v YmplY3Q7CiAKLS8qIERlZmluZWQgaW4gcHktYnJlYWtwb2ludC5jICovCi10 eXBlZGVmIHN0cnVjdCBicmVha3BvaW50X29iamVjdCBicmVha3BvaW50X29i amVjdDsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTE2MSw2ICsxOTksNyBA QCBQeU9iamVjdCAqYmxvY2tfdG9fYmxvY2tfb2JqZWN0IChzdHJ1Y3QgYmxv Y2sgKmJsb2NrLCBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSk7CiBQeU9iamVj dCAqdmFsdWVfdG9fdmFsdWVfb2JqZWN0IChzdHJ1Y3QgdmFsdWUgKnYpOwog UHlPYmplY3QgKnR5cGVfdG9fdHlwZV9vYmplY3QgKHN0cnVjdCB0eXBlICop OwogUHlPYmplY3QgKmZyYW1lX2luZm9fdG9fZnJhbWVfb2JqZWN0IChzdHJ1 Y3QgZnJhbWVfaW5mbyAqZnJhbWUpOworc3RydWN0IGZyYW1lX2luZm8gKmZy YW1lX29iamVjdF90b19mcmFtZV9pbmZvIChQeU9iamVjdCAqZnJhbWVfb2Jq KTsKIAogUHlPYmplY3QgKnBzcGFjZV90b19wc3BhY2Vfb2JqZWN0IChzdHJ1 Y3QgcHJvZ3JhbV9zcGFjZSAqKTsKIFB5T2JqZWN0ICpwc3B5X2dldF9wcmlu dGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKQEAgLTE4MSw2ICsyMjAsOCBA QCBzdHJ1Y3QgdHlwZSAqdHlwZV9vYmplY3RfdG9fdHlwZSAoUHlPYmplY3Qg Km9iaik7CiBzdHJ1Y3Qgc3ltdGFiICpzeW10YWJfb2JqZWN0X3RvX3N5bXRh YiAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3Qgc3ltdGFiX2FuZF9saW5lICpz YWxfb2JqZWN0X3RvX3N5bXRhYl9hbmRfbGluZSAoUHlPYmplY3QgKm9iaik7 CiAKK2ludCBicGZpbmlzaHB5X2lzX2ZpbmlzaF9icCAoUHlPYmplY3QgKm9i aik7CisKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9hdXRvX2xvYWQgKHZvaWQp Owogdm9pZCBnZGJweV9pbml0aWFsaXplX3ZhbHVlcyAodm9pZCk7CiB2b2lk IGdkYnB5X2luaXRpYWxpemVfZnJhbWVzICh2b2lkKTsKQEAgLTE5NCw2ICsy MzUsNyBAQCB2b2lkIGdkYnB5X2luaXRpYWxpemVfZnVuY3Rpb25zICh2b2lk KTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9wc3BhY2UgKHZvaWQpOwogdm9p ZCBnZGJweV9pbml0aWFsaXplX29iamZpbGUgKHZvaWQpOwogdm9pZCBnZGJw eV9pbml0aWFsaXplX2JyZWFrcG9pbnRzICh2b2lkKTsKK3ZvaWQgZ2RicHlf aW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAodm9pZCk7CiB2b2lkIGdk YnB5X2luaXRpYWxpemVfbGF6eV9zdHJpbmcgKHZvaWQpOwogdm9pZCBnZGJw eV9pbml0aWFsaXplX3BhcmFtZXRlcnMgKHZvaWQpOwogdm9pZCBnZGJweV9p bml0aWFsaXplX3RocmVhZCAodm9pZCk7CmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5dGhvbi5jIGIvZ2RiL3B5dGhvbi9weXRob24uYwppbmRleCA4YTdi YzY2Li5mNzFmZDRhIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5j CisrKyBiL2dkYi9weXRob24vcHl0aG9uLmMKQEAgLTkyNiw2ICs5MjYsMTEg QEAgZ2RicHlfYnJlYWtwb2ludF9oYXNfcHlfY29uZCAoc3RydWN0IGJyZWFr cG9pbnRfb2JqZWN0ICpicF9vYmopCiAJCSAgICAic2NyaXB0aW5nIGlzIG5v dCBzdXBwb3J0ZWQuIikpOwogfQogCitzdHJ1Y3QgYnJlYWtwb2ludCAqCitn ZGJweV9pc19zdG9wcGVkX2F0X2JwX3R5cGUgKGJwc3RhdCBzdG9wX2Jwc3Rh dCwgZW51bSBweV9icF90eXBlIHR5cGUpCit7CisgIHJldHVybiBOVUxMOwor fQogI2VuZGlmIC8qIEhBVkVfUFlUSE9OICovCiAKIAwKQEAgLTEwNjAsNiAr MTA2NSw3IEBAIEVuYWJsZXMgb3IgZGlzYWJsZXMgcHJpbnRpbmcgb2YgUHl0 aG9uIHN0YWNrIHRyYWNlcy4iKSwKICAgZ2RicHlfaW5pdGlhbGl6ZV9wc3Bh Y2UgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfb2JqZmlsZSAoKTsKICAgZ2Ri cHlfaW5pdGlhbGl6ZV9icmVha3BvaW50cyAoKTsKKyAgZ2RicHlfaW5pdGlh bGl6ZV9maW5pc2hicmVha3BvaW50cyAoKTsKICAgZ2RicHlfaW5pdGlhbGl6 ZV9sYXp5X3N0cmluZyAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV90aHJlYWQg KCk7CiAgIGdkYnB5X2luaXRpYWxpemVfaW5mZXJpb3IgKCk7CmRpZmYgLS1n aXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5oIGIvZ2RiL3B5dGhvbi9weXRob24u aAppbmRleCBjZTBlYjM1Li45YmU2YWM5IDEwMDY0NAotLS0gYS9nZGIvcHl0 aG9uL3B5dGhvbi5oCisrKyBiL2dkYi9weXRob24vcHl0aG9uLmgKQEAgLTIx LDYgKzIxLDcgQEAKICNkZWZpbmUgR0RCX1BZVEhPTl9ICiAKICNpbmNsdWRl ICJ2YWx1ZS5oIgorI2luY2x1ZGUgImJyZWFrcG9pbnQuaCIKIAogc3RydWN0 IGJyZWFrcG9pbnRfb2JqZWN0OwogCkBAIC00Nyw0ICs0OCw2IEBAIGludCBn ZGJweV9zaG91bGRfc3RvcCAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpi cF9vYmopOwogCiBpbnQgZ2RicHlfYnJlYWtwb2ludF9oYXNfcHlfY29uZCAo c3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopOwogCitzdHJ1Y3Qg YnJlYWtwb2ludCAqZ2RicHlfaXNfc3RvcHBlZF9hdF9icF90eXBlIChicHN0 YXQgc3RvcF9icHN0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnVtIHB5X2JwX3R5cGUgdHlwZSk7CiAj ZW5kaWYgLyogR0RCX1BZVEhPTl9IICovCmRpZmYgLS1naXQgYS9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAgYi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAKaW5kZXggZjBh ODNmMS4uODc1NTg4OCAxMDA2NDQKLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwCisrKyBiL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cApAQCAtNDQsNyArNDQsOCBA QCBnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJweXRob24gYmxpc3QgPSBnZGIu YnJlYWtwb2ludHMoKSIgIkdldCBCcmVha3BvaW50IExpc3QiCiBnZGJfdGVz dCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0iICI8Z2RiLkJyZWFrcG9pbnQg b2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sgb2JqIGV4aXN0cyIKIGdkYl90ZXN0 ICJweXRob24gcHJpbnQgYmxpc3RcWzBcXS5sb2NhdGlvbiIgIm1haW4uIiAi Q2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIKIAotZ2RiX2JyZWFrcG9pbnQg W2dkYl9nZXRfbGluZV9udW1iZXIgIkJyZWFrIGF0IG11bHRpcGx5LiJdCitz ZXQgbXVsdF9saW5lIFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBhdCBt dWx0aXBseS4iXQorZ2RiX2JyZWFrcG9pbnQgJHttdWx0X2xpbmV9CiBnZGJf Y29udGludWVfdG9fYnJlYWtwb2ludCAiQnJlYWsgYXQgbXVsdGlwbHkuIgog CiAjIENoZWNrIHRoYXQgdGhlIFB5dGhvbiBicmVha3BvaW50IGNvZGUgbm90 ZWQgdGhlIGFkZGl0aW9uIG9mIGEKQEAgLTU0LDcgKzU1LDkgQEAgZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBsZW4oYmxpc3QpIiAiMiIgIkNoZWNrIGZvciB0 d28gYnJlYWtwb2ludHMiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0 XFswXF0iICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAiQ2hl Y2sgb2JqIGV4aXN0cyIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3Rc WzBcXS5sb2NhdGlvbiIgIm1haW4uIiAiQ2hlY2sgYnJlYWtwb2ludCBsb2Nh dGlvbiIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXSIgIjxn ZGIuQnJlYWtwb2ludCBvYmplY3QgYXQgJGhleD4iICJDaGVjayBvYmogZXhp c3RzIgotZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMVxdLmxvY2F0 aW9uIiAicHktYnJlYWtwb2ludFwuYzo0MSoiICJDaGVjayBicmVha3BvaW50 IGxvY2F0aW9uIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsx XF0ubG9jYXRpb24iICJweS1icmVha3BvaW50XC5jOiR7bXVsdF9saW5lfSoi IFwKKyAgICAgICAgICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9uIgogCiAj IENoZWNrIGhpdCBhbmQgaWdub3JlIGNvdW50cy4gCiBnZGJfdGVzdCAicHl0 aG9uIHByaW50IGJsaXN0XFsxXF0uaGl0X2NvdW50IiAiMSIgIkNoZWNrIGJy ZWFrcG9pbnQgaGl0IGNvdW50IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LWNjLmNjIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LWNj LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZWVh MDYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQtY2MuY2MKQEAgLTAsMCArMSw1OSBA QAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBk ZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisq LworCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKwordm9pZAordGhyb3dfZXhj ZXB0aW9uXzEgKGludCBlKQoreworICB0aHJvdyBuZXcgaW50IChlKTsKK30K Kwordm9pZAordGhyb3dfZXhjZXB0aW9uIChpbnQgZSkKK3sKKyAgdGhyb3df ZXhjZXB0aW9uXzEgKGUpOworfQorCitpbnQKK21haW4gKHZvaWQpCit7Cisg IGludCBpOworICB0cnkKKyAgICB7CisgICAgICB0aHJvd19leGNlcHRpb25f MSAoMTApOworICAgIH0KKyAgY2F0Y2ggKGNvbnN0IGludCAqZSkKKyAgICB7 CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiRXhjZXB0aW9uICMiIDw8ICplIDw8 IHN0ZDo6ZW5kbDsKKyAgICB9CisgIGkgKz0gMTsgLyogQnJlYWsgYWZ0ZXIg ZXhjZXB0aW9uIDEuICAqLworCisgIHRyeQorICAgIHsKKyAgICAgIHRocm93 X2V4Y2VwdGlvbiAoMTApOworICAgIH0KKyAgY2F0Y2ggKGNvbnN0IGludCAq ZSkKKyAgICB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiRXhjZXB0aW9uICMi IDw8ICplIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgIGkgKz0gMTsgLyogQnJl YWsgYWZ0ZXIgZXhjZXB0aW9uIDIuICAqLworCisgIHJldHVybiBpOworfQpk aWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LWNjLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludC1jYy5leHAKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0MDIzZAotLS0gL2Rldi9udWxsCisr KyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtw b2ludC1jYy5leHAKQEAgLTAsMCArMSw1OSBAQAorIyBDb3B5cmlnaHQgKEMp IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIg dGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIG1lY2hhbmlzbQorIyBleHBvc2lu ZyB2YWx1ZXMgdG8gUHl0aG9uLgorCitpZiAkdHJhY2VsZXZlbCB0aGVuIHsK KyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKK30KKworbG9hZF9saWIgZ2RiLXB5 dGhvbi5leHAKKworc2V0IHRlc3RmaWxlICJweS1maW5pc2gtYnJlYWtwb2lu dC1jYyIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmNjCitzZXQgYmluZmls ZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9CitzZXQgcHlmaWxl ICAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5CisKKyMgU3Rh cnQgd2l0aCBhIGZyZXNoIGdkYi4KK2dkYl9leGl0CitnZGJfc3RhcnQKK2dk Yl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQg JHtiaW5maWxlfQorCitpZiB7IFtnZGJfY29tcGlsZSAiJHtzcmNkaXJ9LyR7 c3ViZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSB7 ZGVidWcgYysrfV0gIT0gIiIgfSB7CisgICAgdW50ZXN0ZWQgIkNvdWxkbid0 IGNvbXBpbGUgJHtzcmNmaWxlfSIKKyAgICByZXR1cm4gLTEKK30KKworaWYg IVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRv IG1haW4uIgorICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0ICJzb3VyY2Ug JHB5ZmlsZSIgIi4qUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAg ICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitnZGJfdGVzdCAiYnJl YWsgW2dkYl9nZXRfbGluZV9udW1iZXIgIkJyZWFrIGFmdGVyIGV4Y2VwdGlv biAxLiJdIiAiQnJlYWtwb2ludC4qIGF0IC4qIiBcCisgICAgICAgICAic2V0 IHdhdGNoZG9nIGFmdGVyIHRoZSBleGNlcHRpb24gMSIKK2dkYl90ZXN0ICJi cmVhayBbZ2RiX2dldF9saW5lX251bWJlciAiQnJlYWsgYWZ0ZXIgZXhjZXB0 aW9uIDIuIl0iICJCcmVha3BvaW50LiogYXQgLioiIFwKKyAgICAgICAgICJz ZXQgd2F0Y2hkb2cgYWZ0ZXIgdGhlIGV4Y2VwdGlvbiAyIgorICAgICAgICAg CitnZGJfdGVzdCAicHl0aG9uIEV4Y2VwdGlvbkJyZWFrcG9pbnQoKSIgIkV4 Y2VwdGlvbkJyZWFrcG9pbnQgaW5pdCIgInNldCBCUCBiZWZvcmUgdGhyb3dp bmcgdGhlIGV4Y2VwdGlvbiIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVu KGdkYi5icmVha3BvaW50cygpKSIgIjQiICJjaGVjayBudW1iZXIgb2YgQlBz IgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiLipzdG9wcGVkIGF0IEV4Y2VwdGlv bkZpbmlzaEJyZWFrcG9pbnQuKiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQg aW4gY2F0Y2goKSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGdkYi5i cmVha3BvaW50cygpKSIgIjQiICJjaGVjayBmaW5pc2ggQlAgcmVtb3ZhbCIK KworZ2RiX3Rlc3QgImNvbnRpbnVlIiAiLipleGNlcHRpb24gZGlkIG5vdCBm aW5pc2guKiIgIkZpbmlzaEJyZWFrcG9pbnQgd2l0aCBleGNlcHRpb24gdGhy b3duIG5vdCBjYXVnaHQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQtY2MucHkgYi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQtY2MucHkK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkZmUyZgot LS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludC1jYy5weQpAQCAtMCwwICsxLDQzIEBACisj IENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFy dCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHB5dGhvbiBGaW5p c2gKKyMgQnJlYWtwb2ludHMuCisKK2NsYXNzIEV4Y2VwdGlvbkJyZWFrcG9p bnQoZ2RiLkJyZWFrcG9pbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToK KyAgICAgICAgZ2RiLkJyZWFrcG9pbnQuX19pbml0X18oc2VsZiwgc3BlYz0i dGhyb3dfZXhjZXB0aW9uXzEiLCBpbnRlcm5hbD0xKQorICAgICAgICBzZWxm LnNpbGVudCA9IFRydWUKKyAgICAgICAgcHJpbnQgIkV4Y2VwdGlvbkJyZWFr cG9pbnQgaW5pdCIKKyAgICAgICAgCisgICAgZGVmIHN0b3Aoc2VsZik6Cisg ICAgICAgIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9m cmFtZSgpKQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgRXhjZXB0 aW9uRmluaXNoQnJlYWtwb2ludChnZGIuRmluaXNoQnJlYWtwb2ludCk6Cisg ICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgZ2RiLkZp bmlzaEJyZWFrcG9pbnQuX19pbml0X18oc2VsZiwgZnJhbWUsIGludGVybmFs PTEpCisgICAgICAgIHNlbGYuc2lsZW50ID0gVHJ1ZTsKKyAKKyAgICBkZWYg c3RvcChzZWxmKToKKwlwcmludCAic3RvcHBlZCBhdCBFeGNlcHRpb25GaW5p c2hCcmVha3BvaW50IgorCWdkYi5wb3N0X2V2ZW50KHNlbGYuZGVsZXRlKQor ICAgICAgICByZXR1cm4gVHJ1ZSAKKyAgICAKKyAgICBkZWYgb3V0X29mX3Nj b3BlKHNlbGYpOgorICAgICAgICBwcmludCAiZXhjZXB0aW9uIGRpZCBub3Qg ZmluaXNoIC4uLiIKKworCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRl ZCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1m aW5pc2gtYnJlYWtwb2ludC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNTdhNmUwNgotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5j CkBAIC0wLDAgKzEsODIgQEAKKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBv ZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAyMDEx IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSAgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorKi8KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworaW50 IGluY3JlYXNlXzEgKGludCAqYSkKK3sKKyAgKmEgKz0gMTsKKyAgcmV0dXJu IC01OworfQorCit2b2lkIGluY3JlYXNlIChpbnQgKmEpCit7CisgIGluY3Jl YXNlXzEgKGEpOworfQorCitpbnQKK3Rlc3RfMSAoaW50IGksIGludCBqKQor eworICByZXR1cm4gaSA9PSBqOworfQorCitpbnQKK3Rlc3QoaW50IGksIGlu dCBqKQoreworICByZXR1cm4gdGVzdF8xIChpLCBqKTsKK30KKworaW50Citj YWxsX2xvbmdqbXBfMSAoam1wX2J1ZiAqYnVmKQoreworICBsb25nam1wICgq YnVmLCAxKTsKK30KKworaW50CitjYWxsX2xvbmdqbXAgKGptcF9idWYgKmJ1 ZikKK3sKKyAgY2FsbF9sb25nam1wXzEgKGJ1Zik7Cit9CisKKworaW50IG1h aW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGptcF9idWYgZW52 OworICBpbnQgZm9vID0gNTsKKyAgaW50IGJhciA9IDQyOworICBpbnQgaSwg ajsKKworICBpID0gMDsKKyAgLyogQnJlYWsgYXQgaW5jcmVhc2UuICovCisg IGluY3JlYXNlICgmaSk7CisgIGluY3JlYXNlICgmaSk7CisgIGluY3JlYXNl ICgmaSk7CisKKyAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisgICAgewor ICAgICAgaiArPSAxOyAvKiBDb25kaXRpb24gQnJlYWsuICovCisgICAgfQor CisgIGlmIChzZXRqbXAgKGVudikgPT0gMCkgLyogbG9uZ2ptcCBjYXVnaHQg Ki8KKyAgICB7CisgICAgICBjYWxsX2xvbmdqbXAgKCZlbnYpOworICAgIH0K KyAgZWxzZQorCSAgaiArPSAxOyAvKiBhZnRlciBsb25nam1wLiAqLworCisg IHJldHVybiBqOyAvKiBCcmVhayBhdCBlbmQuICovCit9CmRpZmYgLS1naXQg YS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1i cmVha3BvaW50LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi42NWVlYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmV4cApAQCAtMCww ICsxLDE4MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVz dHMgdGhlIG1lY2hhbmlzbQorIyBleHBvc2luZyB2YWx1ZXMgdG8gUHl0aG9u LgorCitpZiAkdHJhY2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNl bGV2ZWwKK30KKworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0IHRl c3RmaWxlICJweS1maW5pc2gtYnJlYWtwb2ludCIKK3NldCBzcmNmaWxlICR7 dGVzdGZpbGV9LmMKKworaWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAke3Rl c3RmaWxlfS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7CisgICAg cmV0dXJuIC0xCit9CisKK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgW3JlbW90 ZV9kb3dubG9hZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0Zmls ZX0ucHldCisKKworIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2NyaXB0 aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRob25fdGVzdHNd IH0geyBjb250aW51ZSB9CisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50 IGluIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGxvbmdqbXAgCisjCisKK2NsZWFu X3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworaWYgIVtydW50byBjYWxsX2xvbmdq bXBfMV0gdGhlbiB7CisgICAgcGVycm9yICJjb3VsZG4ndCBydW4gdG8gYnJl YWtwb2ludCBjYWxsX2xvbmdqbXAiCisgICAgY29udGludWUKK30KKworZ2Ri X3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiLipQeXRob24g c2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9u IHNjcmlwdHMiCisKK2dkYl90ZXN0ICJweXRob24gbGptcEJQID0gTG9uZ2pt cEZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgXAorICAg ICAgICAgIkxvbmdqbXBGaW5pc2hCcmVha3BvaW50IGluaXQiIFwKKyAgICAg ICAgICJzZXQgZmluaXNoIGJyZWFrcG9pbnQiIAorZ2RiX3Rlc3QgImJyZWFr IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJhZnRlciBsb25nam1wLiJdIiAiQnJl YWtwb2ludC4qIGF0IC4qIiBcCisgICAgICAgICAic2V0IEJQIGFmdGVyIHRo ZSBqdW1wIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiLipMb25nam1wIGRpZG4n dCBmaW5pc2guKiIgImNoZWNrIEZpbmlzaEJQIG91dCBvZiBzY29wZSBub3Rp ZmljYXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIEJQ IGNvbmRpdGlvbiBldmFsdWF0aW9uIAorIyAoZmluaXNoIGluIGR1bW15IGZy YW1lKQorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK3NldCBj b25kX2xpbmUgW2dkYl9nZXRfbGluZV9udW1iZXIgIkNvbmRpdGlvbiBCcmVh ay4iXQoraWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5u b3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0 ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIgIi4qUHl0aG9uIHNjcmlw dCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3Jp cHRzIgorICAgICAgICAgCitnZGJfdGVzdCAiYnJlYWsgJHtjb25kX2xpbmV9 IGlmIHRlc3RfMShpLDgpIiAiLipCcmVha3BvaW50IC4qIGF0IC4qIiAic2V0 IGNvbmRpdGlvbmFsIEJQIgorZ2RiX3Rlc3QgInB5dGhvbiBUZXN0QnJlYWtw b2ludCgpIiAiVGVzdEJyZWFrcG9pbnQgaW5pdCIgInNldCBCUCBpbiBjb25k aXRpb24iCisKKworc2V0IG1zZyAiY2hlY2sgRmluaXNoQnJlYWtwb2ludCBk b24ndCBzdG9wIGluIEdEQiBEdW1teSBGcmFtZSIKK2dkYl90ZXN0X211bHRp cGxlICJjb250aW51ZSIgJG1zZyB7CisJLXJlICIuKnRlc3QgZG9uJ3Qgc3Rv cCAyLip0ZXN0IHN0b3AuKnRlc3QgZG9uJ3Qgc3RvcCA0LioiIHsKKwkJcGFz cyAkbXNnCisJfQorCS1yZSAiLip0ZXN0IGRvbid0IHN0b3AgMi4qdGVzdCBz dG9wLiokZ2RiX3Byb21wdCIgeworCQlmYWlsICRtc2cKKwl9Cit9CisKK2dk Yl90ZXN0ICJwcmludCBpIiAiOCIgImNoZWNrIHN0b3BwZWQgbG9jYXRpb24i CisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIEJQIGNvbmRpdGlv biBldmFsdWF0aW9uIAorIyAoZmluaXNoIGluIG5vcm1hbCBmcmFtZSkKKyMK KworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291 cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICIuKlB5dGhvbiBzY3JpcHQgaW1w b3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIK KworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3Qg cnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0ICJi cmVhayAke2NvbmRfbGluZX0gaWYgdGVzdChpLDgpIiAiLipCcmVha3BvaW50 IC4qIGF0IC4qIiAic2V0IGNvbmRpdGlvbmFsIEJQIgorZ2RiX3Rlc3QgInB5 dGhvbiBUZXN0QnJlYWtwb2ludCgpIiAiVGVzdEJyZWFrcG9pbnQgaW5pdCIg InNldCBCUCBpbiBjb25kaXRpb24iCisKK2dkYl90ZXN0ICJjb250aW51ZSIg Ii4qdGVzdCBkb24ndCBzdG9wIDEuKnRlc3QgZG9uJ3Qgc3RvcCAyLip0ZXN0 IHN0b3AuKkVycm9yIGluIHRlc3RpbmcgYnJlYWtwb2ludCBjb25kaXRpb24u KlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4g YSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuKiIgXAorICAgICAgICAgInN0 b3AgaW4gY29uZGl0aW9uIGZ1bmN0aW9uIgorICAgICAgICAgCitzZXR1cF9r ZmFpbCAibm9ybWFsX3N0b3Bfbm90aWZpY2F0aW9uIG5vdCB0cmlnZ2VyZWQg ZHVyaW5nIGNvbmRpdGlvbiBldmFsdWF0aW9uIiAqLSotKgorZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBnZGIuYnJlYWtwb2ludHMoKVxbMlxdLm91dF9vZl9z Y29wZV9ub3RpZiIgIi4qRmFsc2UuKiIgImNoZWNrIG91dF9vZl9zY29wZSBu b3RpZmljYXRpb24gZGlzYWJsZWQiCitnZGJfdGVzdF9ub19vdXRwdXQgInB5 dGhvbiBnZGIuYnJlYWtwb2ludHMoKVxbMlxdLm91dF9vZl9zY29wZV9ub3Rp ZiA9IEZhbHNlIiAicmVlc3RhYmxpc2ggY29ycmVjdCB2YWx1ZSIKKworZ2Ri X3Rlc3QgImNvbnRpbnVlIiAiQ29udGludWluZy4qIiAiZmluaXNoIGNvbmRp dGlvbiBldmFsdWF0aW9uIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiQnJlYWtw b2ludC4qIiAic3RvcCBhdCBjb25kaXRpb25hbCBicmVha3BvaW50IgorZ2Ri X3Rlc3QgInByaW50IGkiICI4IiAiY2hlY2sgc3RvcHBlZCBsb2NhdGlvbiIK KworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gbm9ybWFsIGNvbmRp dGlvbnMKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitpZiAh W3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8g bWFpbi4iCisgICAgcmV0dXJuIDAKK30KK2dkYl90ZXN0X25vX291dHB1dCAi c2V0IGNvbmZpcm0gb2ZmIiAiZGlzYWJsZSBjb25maXJtYXRpb24iCitnZGJf dGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICIuKlB5dGhvbiBz Y3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRob24g c2NyaXB0cyIKK2dkYl90ZXN0ICJweXRob24gTXlCcmVha3BvaW50KFwiaW5j cmVhc2VfMVwiKSIgIi4qQnJlYWtwb2ludCAyLioiIFwKKyAgICAgICAgICJj cmVhdGUgUHl0aG9uIGZ1bmN0aW9uIGJyZWFrcG9pbnQiCitnZGJfdGVzdCAi Y29udGludWUiICIuKkFycml2ZWQgYXQgTXlCcmVha3BvaW50IHdpdGggMC4q IiAiY2hlY2sgTXlCcmVha3BvaW50IGhpdCIKKworIyBzZXQgRmluaXNoQnJl YWtwb2ludAorCitnZGJfdGVzdCAicHl0aG9uIGZpbmlzaGJwID0gTXlGaW5p c2hCcmVha3BvaW50IChnZGIucGFyc2VfYW5kX2V2YWwgKFwiYVwiKSwgZ2Ri LnNlbGVjdGVkX2ZyYW1lICgpKSIgXAorICAgICAgICAgIi4qQnJlYWtwb2lu dCAzLioiICJzZXQgRmluaXNoQnJlYWtwb2ludCIKK2dkYl90ZXN0ICJweXRo b24gcHJpbnQgZmluaXNoYnAub3V0X29mX3Njb3BlX25vdGlmIiAiLipUcnVl LioiIFwKKyAgICAgICAgICJjaGVjayBvdXRfb2Zfc2NvcGVfbm90aWYgYXQg aW5pdCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAucmV0dXJu X3ZhbHVlIiAiLipOb25lLioiIFwKKyAgICAgICAgICJjaGVjayByZXR1cm5f dmFsdWUgYXQgaW5pdCIKKworIyBjaGVjayBub3JtYWwgYnAgaGl0CisKK2dk Yl90ZXN0ICJjb250aW51ZSIgIi4qTXlGaW5pc2hCcmVha3BvaW50IHN0b3Ag d2l0aC4qIzAuKmluY3JlYXNlLioiIFwKKyAgICAgICAgICJjaGVjayBNeUZp bmlzaEJyZWFrcG9pbnQgaGl0IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBm aW5pc2hicC5yZXR1cm5fdmFsdWUiICIuKi01LioiICJjaGVjayByZXR1cm5f dmFsdWUiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJwLm91dF9v Zl9zY29wZV9ub3RpZiIgIi4qRmFsc2UuKiIgXAorICAgICAgICAgImNoZWNr IG91dF9vZl9zY29wZV9ub3RpZiBkaXNhYmxlZCBhZnRlciBoaXQiCitnZGJf dGVzdCAiZmluaXNoIiAiLiptYWluLioiICJyZXR1cm4gdG8gbWFpbigpIgor Z2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hicC5yZXR1cm5fdmFsdWUi ICIuKk5vbmUuKiIgImNoZWNrIHJldHVybl92YWx1ZSIKKworIyBjaGVjayBm b3JjZWQgcmV0dXJuIC8gY2hlY2sgb3V0IG9mIHNjcG9wCitnZGJfdGVzdF9u b19vdXRwdXQgInB5dGhvbiBmaW5pc2hicC5vdXRfb2Zfc2NvcGVfbm90aWYg PSBUcnVlIiBcCisgICAgICAgICAicmUtZW5hYmxlIG91dF9vZl9zY29wZV9u b3RpZiIKKworZ2RiX3Rlc3QgImNvbnRpbnVlIiAiLipBcnJpdmVkIGF0IE15 QnJlYWtwb2ludCB3aXRoLioiICJjaGVjayBNeUJyZWFrcG9pbnQgc2Vjb25k IGhpdCIKK2dkYl90ZXN0ICJ1cCIgIi4qaW5jcmVhc2VfMS4qIiAiZ28gb25l IGZyYW1lIHVwIgorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJyZXR1cm4iICJyZXR1 cm4gZnJvbSB0aGUgZnJhbWUiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZp bmlzaGJwLmNoZWNrX3Njb3BlKCkiICIuKk15RmluaXNoQnJlYWtwb2ludCBv dXQgb2Ygc2NvcGUuKlRydWUuKiIgXAorICAgICAgICAgImdvIG9uZSBmcmFt ZSB1cCIKKworIyBjaGVjayBmb3JjZWQgcmV0dXJuIC8gYXV0b21hdGljIG5v dGlmaWNhdGlvbgorCitnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBmaW5p c2hicC5vdXRfb2Zfc2NvcGVfbm90aWYgPSBUcnVlIiBcCisgICAgICAgICAi cmUtZW5hYmxlIG91dF9vZl9zY29wZV9ub3RpZiIKKworZ2RiX3Rlc3QgImNv bnRpbnVlIiAiLipBcnJpdmVkIGF0IE15QnJlYWtwb2ludCB3aXRoLioiICJj aGVjayBNeUJyZWFrcG9pbnQgdGhpcmQgaGl0IgorZ2RiX3Rlc3QgInVwIiAi LippbmNyZWFzZV8xLioiICJnbyBvbmUgZnJhbWUgdXAiCitnZGJfdGVzdF9u b19vdXRwdXQgInJldHVybiIgInJldHVybiBmcm9tIHRoZSBmcmFtZSIKK2dk Yl90ZXN0ICJuZXh0IiAiLipNeUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNj b3BlLioiICJjaGVjayBGaW5pc2ggYnJlYWtwb2ludCBkaXNjYXJkIgorZ2Ri X3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hicC5vdXRfb2Zfc2NvcGVfbm90 aWYiICIuKkZhbHNlLioiICJjaGVjayBvdXRfb2Zfc2NvcGVfbm90aWYiCisK KyMgY2hlY2sgRmluaXNoQnJlYWtwb2ludCBpbiBtYWluCisKK2dkYl90ZXN0 ICJweXRob24gTXlGaW5pc2hCcmVha3BvaW50IChOb25lLCBnZGIuc2VsZWN0 ZWRfZnJhbWUgKCkpIiBcCisgICAgICAgICAiLipWYWx1ZUVycm9yOiBcIkZp bmlzaEJyZWFrcG9pbnRcIiBub3QgbWVhbmluZ2Z1bCBpbiB0aGUgb3V0ZXJt b3N0IGZyYW1lLi4qIiBcCisgICAgICAgICAiY2hlY2sgRmluaXNoQlAgbm90 IGFsbG93ZWQgaW4gbWFpbiIKKyAgICAgICAgIAorICAgICAgICAgCmRpZmYg LS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJy ZWFrcG9pbnQucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZjAxNGNjNgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5weQpAQCAt MCwwICsxLDg1IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBU aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRl c3RzIHB5dGhvbiBGaW5pc2gKKyMgQnJlYWtwb2ludHMuCisKK2NsYXNzIE15 QnJlYWtwb2ludChnZGIuQnJlYWtwb2ludCk6CQkKKwlkZWYgc3RvcChzZWxm KToKKwkJdmFsID0gZ2RiLnBhcnNlX2FuZF9ldmFsICgiYSIpCisJCXByaW50 ICJBcnJpdmVkIGF0IE15QnJlYWtwb2ludCB3aXRoICVkIiAlIGludCh2YWwu ZGVyZWZlcmVuY2UoKSkKKwkJcmV0dXJuIFRydWUKKwkJCitjbGFzcyBNeUZp bmlzaEJyZWFrcG9pbnQoZ2RiLkZpbmlzaEJyZWFrcG9pbnQpOgorCWRlZiBf X2luaXRfXyhzZWxmLCB2YWwsIGZyYW1lKToKKwkJc3VwZXIgKE15RmluaXNo QnJlYWtwb2ludCwgc2VsZikuX19pbml0X18gKGZyYW1lKQorCQlwcmludCAi TXlGaW5pc2hCcmVha3BvaW50IGluaXQiCisJCXNlbGYudmFsID0gdmFsCisJ CQorCWRlZiBzdG9wKHNlbGYpOgorCQlwcmludCAiTXlGaW5pc2hCcmVha3Bv aW50IHN0b3Agd2l0aCAlZCIgJSBpbnQoc2VsZi52YWwuZGVyZWZlcmVuY2Uo KSkKKwkJZ2RiLmV4ZWN1dGUoIndoZXJlIDEiKQorCQlyZXR1cm4gVHJ1ZQor CQorCWRlZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisJCXByaW50ICJNeUZpbmlz aEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLi4uIgorCit0ZXN0X2ZpbmlzaF9i cCA9IE5vbmUgCitjbGFzcyBUZXN0QnJlYWtwb2ludChnZGIuQnJlYWtwb2lu dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBnZGIuQnJl YWtwb2ludC5fX2luaXRfXyhzZWxmLCBzcGVjPSJ0ZXN0XzEiLCBpbnRlcm5h bD0xKQorICAgICAgICBzZWxmLnNpbGVudCA9IFRydWUKKyAgICAgICAgc2Vs Zi5maW5pc2ggPSBOb25lCisgICAgICAgIHByaW50ICJUZXN0QnJlYWtwb2lu dCBpbml0IgorICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAJ Z2xvYmFsIHRlc3RfZmluaXNoX2JwCisgICAgICAgIGlmIChzZWxmLmZpbmlz aCA9PSBOb25lKToKKyAgICAgICAgICAgIHNlbGYuZmluaXNoID0gVGVzdEZp bmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKQorICAgICAgICAg ICAgdGVzdF9maW5pc2hfYnAgPSBzZWxmLmZpbmlzaAorICAgICAgICByZXR1 cm4gRmFsc2UKKworCitjbGFzcyBUZXN0RmluaXNoQnJlYWtwb2ludChnZGIu RmluaXNoQnJlYWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZy YW1lKToKKyAgICAgICAgZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18o c2VsZiwgZnJhbWUsIGludGVybmFsPTEpCisgICAgICAgIHNlbGYuY291bnQg PSAwCisgICAgICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBz ZWxmLmNvdW50ICs9IDEKKyAgICAgICAgaWYgKHNlbGYuY291bnQgPT0gMyk6 CisgICAgICAgICAgICBwcmludCAidGVzdCBzdG9wIC4uLiIKKyAgICAgICAg ICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBw cmludCAidGVzdCBkb24ndCBzdG9wICVkIiAlIHNlbGYuY291bnQKKyAgICAg ICAgICAgIHJldHVybiBGYWxzZSAKKyAgICAgICAgCisgICAgCisgICAgZGVm IG91dF9vZl9zY29wZShzZWxmKToKKyAgICAgICAgcHJpbnQgInRlc3QgZGlk bid0IGZpbmlzaCAuLi4iCisJCSAKK2NsYXNzIExvbmdqbXBGaW5pc2hCcmVh a3BvaW50KGdkYi5GaW5pc2hCcmVha3BvaW50KToKKwlkZWYgX19pbml0X18o c2VsZiwgZnJhbWUpOgorCQlnZGIuRmluaXNoQnJlYWtwb2ludC5fX2luaXRf XyhzZWxmLCBmcmFtZSwgaW50ZXJuYWw9MSkKKwkJcHJpbnQgIkxvbmdqbXBG aW5pc2hCcmVha3BvaW50IGluaXQiCisJCQorCWRlZiBzdG9wKHNlbGYpOgor CQlwcmludCAiU3RvcHBlZCBhdCBMb25nam1wRmluaXNoQnJlYWtwb2ludCIK KyAgICAgICAgCisgICAgCisJZGVmIG91dF9vZl9zY29wZShzZWxmKToKKwkJ cHJpbnQgIkxvbmdqbXAgZGlkbid0IGZpbmlzaCAuLi4iCisKK3ByaW50ICJQ eXRob24gc2NyaXB0IGltcG9ydGVkIgo= --0016e68ea4fbcdddb504a4050980--