From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7362 invoked by alias); 25 Oct 2011 08:31:47 -0000 Received: (qmail 7291 invoked by uid 22791); 25 Oct 2011 08:31:35 -0000 X-SWARE-Spam-Status: No, hits=0.1 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BP,TW_EG,TW_GJ,TW_WB,TW_YB,T_TO_NO_BRKTS_FREEMAIL 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, 25 Oct 2011 08:31:15 +0000 Received: by vcbfk1 with SMTP id fk1so228976vcb.0 for ; Tue, 25 Oct 2011 01:31:14 -0700 (PDT) Received: by 10.220.191.77 with SMTP id dl13mr2055310vcb.108.1319531474452; Tue, 25 Oct 2011 01:31:14 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.180.75 with HTTP; Tue, 25 Oct 2011 01:30:53 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Tue, 25 Oct 2011 11:05:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: pmuldoon@redhat.com Cc: Tom Tromey , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=90e6ba4fc2dcce038504b01b5cb7 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-10/txt/msg00651.txt.bz2 --90e6ba4fc2dcce038504b01b5cb7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 6073 On Mon, Oct 24, 2011 at 6:06 PM, Phil Muldoon wrote: > Kevin Pouget writes: > > I have some comments regarding the Python bits. Thanks for that, I replied inline >> >> + =A0** A new class "gdb.FinishBreakpoint" is provided to catch the retu= rn >> + =A0 =A0 of a function. =A0This class is based on the "finish" command >> + =A0 =A0 available in the CLI. >> + >> =A0 =A0** Type objects for struct and union types now allow access to >> =A0 =A0 =A0 the fields using standard Python dictionary (mapping) method= s. >> =A0 =A0 =A0 For example, "some_type['myfield']" now works, as does >> diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c >> index ba1b08f..ffd2ef6 100644 >> --- a/gdb/breakpoint.c >> +++ b/gdb/breakpoint.c >> @@ -5700,6 +5700,7 @@ init_raw_breakpoint_without_location (struct break= point *b, >> =A0 =A0b->frame_id =3D null_frame_id; >> =A0 =A0b->condition_not_parsed =3D 0; >> =A0 =A0b->py_bp_object =3D NULL; >> + =A0b->is_py_finish_bp =3D 0; > > Is there any reason why this need to be in the breakpoint struct? I > think this should be encapsulated in breakpoint PyObject, and a accessor > method provided for it. =A0As a finish breakpoint can only ever be > instantiated by Python, there will always be a py_bp_object attached to > make the call. just to put it back in context (in was back in May ...), here is the rational behind the flag: On Thu, May 19, 2011 at 6:20 PM, Tom Tromey wrote: > gdbpy_is_stopped_at_finish_bp is not safe to call here -- it assumes the > GIL has been acquired, which it has not. I would rather it not be changed > to acquire the GIL, however. I 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. --> PyObject_TypeCheck (obj, &finish_breakpoint_object_type) is not safe to call everywhere I've refactored the code according to your comment anyway, it make sense, so now there are two version: bpfinishpy_is_finish_bp (PyObject *obj) --> strong one, used in "gdbpy_breakpoint_created" bpfinishpy_bp_is_finish_bp (struct breakpoint_object *bp_obj) --> 'weak' one, used in 'gdbpy_is_stopped_at_finish_bp', does't require the GIL >> +/* struct implementing the gdb.FinishBreakpoint object by extending >> + =A0 the gdb.Breakpoint class. =A0*/ >> +struct finish_breakpoint_object >> +{ >> + =A0/* gdb.Breakpoint base class. =A0*/ >> + =A0struct breakpoint_object py_bp; >> + =A0/* gdb.Type object of the function finished by this breakpoint. =A0= */ >> + =A0PyObject *function_type; >> + =A0/* gdb.Type object of the value return by the breakpointed function= . =A0*/ >> + =A0PyObject *return_type; >> + =A0/* When stopped at this FinishBreakpoint, value returned by the fun= ction; >> + =A0 =A0 Py_None if the value is not computable; >> + =A0 =A0 NULL if GDB is not stopped at a FinishBreakpoint. =A0*/ >> + =A0PyObject *return_value; >> +}; > > I think these comments should wrap? They wrap for me in emacs. I'm not sure about the exact meaning of 'wrap' here, but I assume it's about the new line between computable and NULL; I've reformatted it. Thanks for your comments, Kevin 2011-10-25 Kevin Pouget Introduce gdb.FinishBreakpoints in Python * Makefile.in (SUBDIR_PYTHON_OBS): Add py-finishbreakpoint.o. (SUBDIR_PYTHON_SRCS): Add python/py-finishbreakpoint.c. Add build rule for this file. * infcmd.c (get_return_value): New function. (print_return_value): Split to create get_return_value. * inferior.h (get_return_value): New prototype. * infrun.c: Include python/python.h. (stop_registers): Mention FinishBreakpoint in description. (normal_stop): Set stop_registers if stopped at FinishBreakpoint. * python/py-breakpoint.c (breakpoint_object_type): Make non-static. (bppy_pending_object): Likewise (gdbpy_should_stop): Disable temporary breakpoints. (gdbpy_breakpoint_created): Set is_py_finish_bp is necessary. (struct breakpoint_object): Move to python-internal.h (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. (gdbpy_breakpoint_created): Initialize is_finish_bp. * python/python-internal.h (breakpoint_object_type): Add as extern. (bppy_pending_object): Likewise. (typedef struct breakpoint_object) Removed. (struct breakpoint_object): Moved from py-breakpoint.c. Add field is_finish_bp. (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. (frame_object_to_frame_info): New prototype. (gdbpy_initialize_finishbreakpoints): New prototype. (bpfinishpy_bp_is_finish_bp): Likewise. (bpfinishpy_is_finish_bp): Likewise. * python/py-finishbreakpoint.c: New file. * python/py-frame.c(frame_object_to_frame_info): Make non-static and accept PyObject instead of frame_object. (frapy_is_valid): Don't cast to frame_object. (frapy_name): Likewise. (frapy_type): Likewise. (frapy_unwind_stop_reason): Likewise. (frapy_pc): Likewise. (frapy_block): Likewise. (frapy_function): Likewise. (frapy_older): Likewise. (frapy_newer): Likewise. (frapy_find_sal): Likewise. (frapy_read_var): Likewise. (frapy_select): Likewise. * python/python.c (gdbpy_is_stopped_at_finish_bp): New noop function. (_initialize_python): Add gdbpy_initialize_finishbreakpoints. * python/python.h: Include breakpoint.h (gdbpy_is_stopped_at_finish_bp): New prototype. doc/ * gdb.texinfo (Breakpoints In Python): New subsection: Finish Breakpoints. (Python API): Add menu entry for Finish Breakpoints testsuite/ * gdb.python/py-breakpoint.exp (mult_line): Define and use variable instead of line number. * gdb.python/py-finish-breakpoint.c: New file. * gdb.python/py-finish-breakpoint.exp: New file. * gdb.python/py-finish-breakpoint.py: New file. * gdb.python/py-finish-breakpoint2.cc: New file. * gdb.python/py-finish-breakpoint2.exp: New file. * gdb.python/py-finish-breakpoint2.py: New file. --90e6ba4fc2dcce038504b01b5cb7 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Introduce-gdb.FinishBreakpoints.patch" Content-Disposition: attachment; filename="0001-Introduce-gdb.FinishBreakpoints.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gu6mt59q1 Content-length: 73591 RnJvbSAxYmNmNjhlZWY0NjViNjI1NTU3NjhlYzNiY2EyZGZhM2U1ODU4Yzkz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJbnRyb2R1Y2UgZ2Ri LkZpbmlzaEJyZWFrcG9pbnRzCgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2RvYy9nZGIudGV4aW5mbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDQ5ICsrKwogZ2RiL2luZmNtZC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICst CiBnZGIvaW5mZXJpb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDMgKwogZ2RiL2luZnJ1bi5jICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICstCiBnZGIvcHl0aG9u L3B5LWJyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NTEgKy0tCiBnZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYyAgICAg ICAgICAgICAgICAgICB8ICA0MDQgKysrKysrKysrKysrKysrKysrKysKIGdk Yi9weXRob24vcHktZnJhbWUuYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAzMiArLQogZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaCAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDUwICsrKy0KIGdkYi9weXRob24v cHl0aG9uLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg NiArCiBnZGIvcHl0aG9uL3B5dGhvbi5oICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDIgKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWJyZWFrcG9pbnQuZXhwICAgICAgICAgfCAgICA3ICstCiBnZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuYyAgICB8 ICAgOTcgKysrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludC5leHAgIHwgIDIzMCArKysrKysrKysrKwogZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5ICAg fCAgIDg4ICsrKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQyLmNjICB8ICAgNTkgKysrCiBnZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cCB8ICAgNjUg KysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50Mi5weSAgfCAgIDM0ICsrCiAxOSBmaWxlcyBjaGFuZ2VkLCAxMTUy IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGdkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5j YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50Mi5weQoKZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9N YWtlZmlsZS5pbgppbmRleCAzMmQ4ZWYzLi42Y2VkZjEyIDEwMDY0NAotLS0g YS9nZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0y ODcsNiArMjg3LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktZXZ0 cmVnaXN0cnkubyBcCiAJcHktZXZ0cy5vIFwKIAlweS1leGl0ZWRldmVudC5v IFwKKwlweS1maW5pc2hicmVha3BvaW50Lm8gXAogCXB5LWZyYW1lLm8gXAog CXB5LWZ1bmN0aW9uLm8gXAogCXB5LWluZmVyaW9yLm8gXApAQCAtMzE4LDYg KzMxOSw3IEBAIFNVQkRJUl9QWVRIT05fU1JDUyA9IFwKIAlweXRob24vcHkt ZXZ0cmVnaXN0cnkuYyBcCiAJcHl0aG9uL3B5LWV2dHMuYyBcCiAJcHl0aG9u L3B5LWV4aXRlZGV2ZW50LmMgXAorCXB5dGhvbi9weS1maW5pc2hicmVha3Bv aW50LmMgXAogCXB5dGhvbi9weS1mcmFtZS5jIFwKIAlweXRob24vcHktZnVu Y3Rpb24uYyBcCiAJcHl0aG9uL3B5LWluZmVyaW9yLmMgXApAQCAtMjEwMyw2 ICsyMTA1LDEwIEBAIHB5LWV4aXRlZGV2ZW50Lm86ICQoc3JjZGlyKS9weXRo b24vcHktZXhpdGVkZXZlbnQuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZM QUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMKIAkkKFBP U1RDT01QSUxFKQogCitweS1maW5pc2hicmVha3BvaW50Lm86ICQoc3JjZGly KS9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCisJJChDT01QSUxFKSAk KFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZmluaXNoYnJl YWtwb2ludC5jCisJJChQT1NUQ09NUElMRSkKKwogcHktZnJhbWUubzogJChz cmNkaXIpL3B5dGhvbi9weS1mcmFtZS5jCiAJJChDT01QSUxFKSAkKFBZVEhP Tl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUuYwogCSQoUE9T VENPTVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvTkVXUyBiL2dkYi9ORVdTCmlu ZGV4IDgwYzU5ZjYuLjY1NWUwMTMgMTAwNjQ0Ci0tLSBhL2dkYi9ORVdTCisr KyBiL2dkYi9ORVdTCkBAIC01MCw2ICs1MCwxMCBAQAogICAqKiBUaGUgImdk Yi5icmVha3BvaW50IiBmdW5jdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGlu IGZhdm9yIG9mCiAgICAgICJnZGIuYnJlYWtwb2ludHMiLgogCisgICoqIEEg bmV3IGNsYXNzICJnZGIuRmluaXNoQnJlYWtwb2ludCIgaXMgcHJvdmlkZWQg dG8gY2F0Y2ggdGhlIHJldHVybgorICAgICBvZiBhIGZ1bmN0aW9uLiAgVGhp cyBjbGFzcyBpcyBiYXNlZCBvbiB0aGUgImZpbmlzaCIgY29tbWFuZAorICAg ICBhdmFpbGFibGUgaW4gdGhlIENMSS4gCisKICAgKiogVHlwZSBvYmplY3Rz IGZvciBzdHJ1Y3QgYW5kIHVuaW9uIHR5cGVzIG5vdyBhbGxvdyBhY2Nlc3Mg dG8KICAgICAgdGhlIGZpZWxkcyB1c2luZyBzdGFuZGFyZCBQeXRob24gZGlj dGlvbmFyeSAobWFwcGluZykgbWV0aG9kcy4KICAgICAgRm9yIGV4YW1wbGUs ICJzb21lX3R5cGVbJ215ZmllbGQnXSIgbm93IHdvcmtzLCBhcyBkb2VzCmRp ZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIu dGV4aW5mbwppbmRleCA2OWUyYmRhLi5mODJiN2ZjIDEwMDY0NAotLS0gYS9n ZGIvZG9jL2dkYi50ZXhpbmZvCisrKyBiL2dkYi9kb2MvZ2RiLnRleGluZm8K QEAgLTIxMjg5LDYgKzIxMjg5LDggQEAgc2l0dWF0aW9uLCBhIFB5dGhvbiBA Y29kZXtLZXlib2FyZEludGVycnVwdH0gZXhjZXB0aW9uIGlzIHRocm93bi4K ICogU3ltYm9sIFRhYmxlcyBJbiBQeXRob246OiAgICAgUHl0aG9uIHJlcHJl c2VudGF0aW9uIG9mIHN5bWJvbCB0YWJsZXMuCiAqIExhenkgU3RyaW5ncyBJ biBQeXRob246OiAgICAgIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBsYXp5 IHN0cmluZ3MuCiAqIEJyZWFrcG9pbnRzIEluIFB5dGhvbjo6ICAgICAgIE1h bmlwdWxhdGluZyBicmVha3BvaW50cyB1c2luZyBQeXRob24uCisqIEZpbmlz aCBCcmVha3BvaW50cyBpbiBQeXRob246OiBTZXR0aW5nIEJyZWFrcG9pbnRz IG9uIGZ1bmN0aW9uIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1c2luZyBQeXRob24KIEBlbmQgbWVudQogCiBAbm9kZSBCYXNp YyBQeXRob24KQEAgLTI0MDgyLDYgKzI0MDg0LDUzIEBAIGNvbW1hbmRzLCBz ZXBhcmF0ZWQgYnkgbmV3bGluZXMuICBJZiB0aGVyZSBhcmUgbm8gY29tbWFu ZHMsIHRoaXMKIGF0dHJpYnV0ZSBpcyBAY29kZXtOb25lfS4gIFRoaXMgYXR0 cmlidXRlIGlzIG5vdCB3cml0YWJsZS4KIEBlbmQgZGVmdmFyCiAKK0Bub2Rl IEZpbmlzaCBCcmVha3BvaW50cyBpbiBQeXRob24KK0BzdWJzdWJzZWN0aW9u IEZpbmlzaCBCcmVha3BvaW50cworCitAY2luZGV4IHB5dGhvbiBmaW5pc2gg YnJlYWtwb2ludHMKK0B0aW5kZXggZ2RiLkZpbmlzaEJyZWFrcG9pbnQKKwor QSBmaW5pc2ggYnJlYWtwb2ludCBpcyBhIHRlbXBvcmFyeSBicmVha3BvaW50 IHNldCBhdCB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YKK2EgZnJhbWUsIGJhc2Vk IG9uIHRoZSBAY29kZXtmaW5pc2h9IGNvbW1hbmQuICBAY29kZXtnZGIuRmlu aXNoQnJlYWtwb2ludH0KK2V4dGVuZHMgQGNvZGV7Z2RiLkJyZWFrcG9pbnR9 LiAgVGhlIHVuZGVybHlpbmcgYnJlYWtwb2ludCB3aWxsIGJlIGRpc2FibGVk IAorYW5kIGRlbGV0ZWQgd2hlbiB0aGUgZXhlY3V0aW9uIHdpbGwgcnVuIG91 dCBvZiB0aGUgYnJlYWtwb2ludCBzY29wZSAoaS5lLkA6IAorQGNvZGV7QnJl YWtwb2ludC5zdG9wfSBvciBAY29kZXtGaW5pc2hCcmVha3BvaW50Lm91dF9v Zl9zY29wZX0gdHJpZ2dlcmVkKS4KKworQGRlZnVuIEZpbmlzaEJyZWFrcG9p bnQuX19pbml0X18gKEB2YXJ7ZnJhbWV9LCBAcntbfUB2YXJ7aW50ZXJuYWx9 QHJ7XX0pCitDcmVhdGUgYSBmaW5pc2ggYnJlYWtwb2ludCBhdCB0aGUgcmV0 dXJuIGFkZHJlc3Mgb2YgdGhlIEBjb2Rle2dkYi5GcmFtZX0KK29iamVjdCBA dmFye2ZyYW1lfS4gIFRoZSBvcHRpb25hbCBAdmFye2ludGVybmFsfSBhcmd1 bWVudCBhbGxvd3MgdGhlCiticmVha3BvaW50IHRvIGJlY29tZSBpbnZpc2li bGUgdG8gdGhlIHVzZXIuICBAeHJlZntCcmVha3BvaW50cyBJbiBQeXRob259 LAorZm9yIGZ1cnRoZXIgZGV0YWlscyBhYm91dCB0aGlzIGFyZ3VtZW50Lgor QGVuZCBkZWZ1bgorCitAZGVmdW4gRmluaXNoQnJlYWtwb2ludC5vdXRfb2Zf c2NvcGUgKHNlbGYpCitJbiBzb21lIGNpcmN1bXN0YW5jZXMgKGUuZy5AOiBA Y29kZXtsb25nam1wfSwgQ0B0eysrfSBleGNlcHRpb25zLCBAdmFsdWV7R0RC Tn0gCitAY29kZXtyZXR1cm59IGNvbW1hbmQsIEBkb3Rze30pLCBhIGZ1bmN0 aW9uIG1heSBub3QgcHJvcGVybHkgdGVybWluYXRlLCBhbmQgdGh1cyAKK25l dmVyIGhpdCB0aGUgZmluaXNoIGJyZWFrcG9pbnQuICBXaGVuIEB2YWx1ZXtH REJOfSBub3RpY2VzIHN1Y2ggYSAKK3NpdHVhdGlvbiwgdGhlIEBjb2Rle291 dF9vZl9zY29wZX0gY2FsbGJhY2sgd2lsbCBiZSB0cmlnZ2VyZWQuCisKK1lv dSBtYXkgd2FudCB0byBzdWItY2xhc3MgQGNvZGV7Z2RiLkZpbmlzaEJyZWFr cG9pbnR9IGFuZCBvdmVycmlkZSB0aGlzCittZXRob2Q6CisKK0BzbWFsbGV4 YW1wbGUKK2NsYXNzIE15RmluaXNoQnJlYWtwb2ludCAoZ2RiLkZpbmlzaEJy ZWFrcG9pbnQpCisgICAgZGVmIHN0b3AgKHNlbGYpOgorICAgICAgICBwcmlu dCAibm9ybWFsIGZpbmlzaCIKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICAK KyAgICBkZWYgb3V0X29mX3Njb3BlICgpOgorICAgICAgICBwcmludCAiYWJu b3JtYWwgZmluaXNoIgorQGVuZCBzbWFsbGV4YW1wbGUgCitAZW5kIGRlZnVu CisKK0BkZWZ2YXIgRmluaXNoQnJlYWtwb2ludC5yZXR1cm5fdmFsdWUKK1do ZW4gQHZhbHVle0dEQk59IGlzIHN0b3BwZWQgYXQgYSBmaW5pc2ggYnJlYWtw b2ludCBhbmQgdGhlIGZyYW1lIAordXNlZCB0byBidWlsZCB0aGUgQGNvZGV7 Z2RiLkZpbmlzaEJyZWFrcG9pbnR9IG9iamVjdCBoYWQgZGVidWcgc3ltYm9s cywgdGhpcworYXR0cmlidXRlIHdpbGwgY29udGFpbiBhIEBjb2Rle2dkYi5W YWx1ZX0gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJldHVybgordmFs dWUgb2YgdGhlIGZ1bmN0aW9uLiAgVGhlIHZhbHVlIHdpbGwgYmUgQGNvZGV7 Tm9uZX0gaWYgdGhlIHJldHVybiB2YWx1ZQord2FzIG5vdCBjb21wdXRhYmxl LiAgVGhpcyBhdHRyaWJ1dGUgaXMgbm90IHdyaXRhYmxlLgorQGVuZCBkZWZ2 YXIKKwogQG5vZGUgTGF6eSBTdHJpbmdzIEluIFB5dGhvbgogQHN1YnN1YnNl Y3Rpb24gUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGxhenkgc3RyaW5ncy4K IApkaWZmIC0tZ2l0IGEvZ2RiL2luZmNtZC5jIGIvZ2RiL2luZmNtZC5jCmlu ZGV4IDNlOGJmNWQuLjMzY2UxZmMgMTAwNjQ0Ci0tLSBhL2dkYi9pbmZjbWQu YworKysgYi9nZGIvaW5mY21kLmMKQEAgLTE0MTMsMTQgKzE0MTMsMTIgQEAg YWR2YW5jZV9jb21tYW5kIChjaGFyICphcmcsIGludCBmcm9tX3R0eSkKICAg dW50aWxfYnJlYWtfY29tbWFuZCAoYXJnLCBmcm9tX3R0eSwgMSk7CiB9CiAM Ci0vKiBQcmludCB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gYXQgdGhlIGVu ZCBvZiBhICdmaW5pc2gnIGNvbW1hbmQuICAqLworLyogUmV0dXJuIHRoZSB2 YWx1ZSBvZiB0aGUgcmVzdWx0IGF0IHRoZSBlbmQgb2YgYSAnZmluaXNoJyBj b21tYW5kL0JQLiAgKi8KIAotc3RhdGljIHZvaWQKLXByaW50X3JldHVybl92 YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZh bHVlX3R5cGUpCitzdHJ1Y3QgdmFsdWUgKgorZ2V0X3JldHVybl92YWx1ZSAo c3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5 cGUpCiB7CiAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2Nh Y2hlX2FyY2ggKHN0b3BfcmVnaXN0ZXJzKTsKLSAgc3RydWN0IGNsZWFudXAg Km9sZF9jaGFpbjsKLSAgc3RydWN0IHVpX3N0cmVhbSAqc3RiOwogICBzdHJ1 Y3QgdmFsdWUgKnZhbHVlOwogICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1 cnJlbnRfdWlvdXQ7CiAKQEAgLTE0NTEsNiArMTQ0OSwxOSBAQCBwcmludF9y ZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0 eXBlICp2YWx1ZV90eXBlKQogICAgICAgaW50ZXJuYWxfZXJyb3IgKF9fRklM RV9fLCBfX0xJTkVfXywgXygiYmFkIHN3aXRjaCIpKTsKICAgICB9CiAKKyAg cmV0dXJuIHZhbHVlOworfQorCisvKiBQcmludCB0aGUgcmVzdWx0IG9mIGEg ZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnIGNvbW1hbmQuICAq LworCitzdGF0aWMgdm9pZAorcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3Qg dHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKK3sK KyAgc3RydWN0IHZhbHVlICp2YWx1ZSA9IGdldF9yZXR1cm5fdmFsdWUgKGZ1 bmNfdHlwZSwgdmFsdWVfdHlwZSk7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRf Y2hhaW47CisgIHN0cnVjdCB1aV9zdHJlYW0gKnN0YjsKKyAgc3RydWN0IHVp X291dCAqdWlvdXQgPSBjdXJyZW50X3Vpb3V0OworCiAgIGlmICh2YWx1ZSkK ICAgICB7CiAgICAgICBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyBvcHRz OwpkaWZmIC0tZ2l0IGEvZ2RiL2luZmVyaW9yLmggYi9nZGIvaW5mZXJpb3Iu aAppbmRleCBjZmFlYTdmLi5mMTk4Njk2IDEwMDY0NAotLS0gYS9nZGIvaW5m ZXJpb3IuaAorKysgYi9nZGIvaW5mZXJpb3IuaApAQCAtMjY5LDYgKzI2OSw5 IEBAIGV4dGVybiB2b2lkIGRldGFjaF9jb21tYW5kIChjaGFyICosIGludCk7 CiAKIGV4dGVybiB2b2lkIG5vdGljZV9uZXdfaW5mZXJpb3IgKHB0aWRfdCwg aW50LCBpbnQpOwogCitleHRlcm4gc3RydWN0IHZhbHVlICpnZXRfcmV0dXJu X3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHR5cGUgKnZhbHVl X3R5cGUpOworCiAvKiBBZGRyZXNzIGF0IHdoaWNoIGluZmVyaW9yIHN0b3Bw ZWQuICAqLwogCiBleHRlcm4gQ09SRV9BRERSIHN0b3BfcGM7CmRpZmYgLS1n aXQgYS9nZGIvaW5mcnVuLmMgYi9nZGIvaW5mcnVuLmMKaW5kZXggZGI2YTVk MS4uNWNlMGM5NCAxMDA2NDQKLS0tIGEvZ2RiL2luZnJ1bi5jCisrKyBiL2dk Yi9pbmZydW4uYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgInRyYWNl cG9pbnQuaCIKICNpbmNsdWRlICJjb250aW51YXRpb25zLmgiCiAjaW5jbHVk ZSAiaW50ZXJwcy5oIgorI2luY2x1ZGUgInB5dGhvbi9weXRob24uaCIKIAog LyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zICovCiAKQEAgLTM2 NSw3ICszNjYsOCBAQCBzaG93X3N0b3Bfb25fc29saWJfZXZlbnRzIChzdHJ1 Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAogaW50IHN0b3BfYWZ0 ZXJfdHJhcDsKIAogLyogU2F2ZSByZWdpc3RlciBjb250ZW50cyBoZXJlIHdo ZW4gZXhlY3V0aW5nIGEgImZpbmlzaCIgY29tbWFuZCBvciBhcmUKLSAgIGFi b3V0IHRvIHBvcCBhIHN0YWNrIGR1bW15IGZyYW1lLCBpZi1hbmQtb25seS1p ZiBwcm9jZWVkX3RvX2ZpbmlzaCBpcyBzZXQuCisgICBhYm91dCB0byBwb3Ag YSBzdGFjayBkdW1teSBmcmFtZSwgaWYtYW5kLW9ubHktaWYgcHJvY2VlZF90 b19maW5pc2ggaXMgc2V0CisgICBvciBhIFB5dGhvbiBGaW5pc2hCcmVha3Bv aW50IGhhcyBiZWVuIGhpdC4KICAgIFRodXMgdGhpcyBjb250YWlucyB0aGUg cmV0dXJuIHZhbHVlIGZyb20gdGhlIGNhbGxlZCBmdW5jdGlvbiAoYXNzdW1p bmcKICAgIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gYSByZWdpc3RlcikuICAq LwogCkBAIC01OTg1LDggKzU5ODcsOSBAQCBub3JtYWxfc3RvcCAodm9pZCkK IAogICAvKiBTYXZlIHRoZSBmdW5jdGlvbiB2YWx1ZSByZXR1cm4gcmVnaXN0 ZXJzLCBpZiB3ZSBjYXJlLgogICAgICBXZSBtaWdodCBiZSBhYm91dCB0byBy ZXN0b3JlIHRoZWlyIHByZXZpb3VzIGNvbnRlbnRzLiAgKi8KLSAgaWYgKGlu ZmVyaW9yX3RocmVhZCAoKS0+Y29udHJvbC5wcm9jZWVkX3RvX2ZpbmlzaAot ICAgICAgJiYgZXhlY3V0aW9uX2RpcmVjdGlvbiAhPSBFWEVDX1JFVkVSU0Up CisgIGlmIChnZGJweV9pc19zdG9wcGVkX2F0X2ZpbmlzaF9icCAoaW5mZXJp b3JfdGhyZWFkICgpLT5jb250cm9sLnN0b3BfYnBzdGF0KQorICAgICAgfHwg KGluZmVyaW9yX3RocmVhZCAoKS0+Y29udHJvbC5wcm9jZWVkX3RvX2Zpbmlz aAorICAgICAgICAgICYmIGV4ZWN1dGlvbl9kaXJlY3Rpb24gIT0gRVhFQ19S RVZFUlNFKSkKICAgICB7CiAgICAgICAvKiBUaGlzIHNob3VsZCBub3QgYmUg bmVjZXNzYXJ5LiAgKi8KICAgICAgIGlmIChzdG9wX3JlZ2lzdGVycykKZGlm ZiAtLWdpdCBhL2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jIGIvZ2RiL3B5 dGhvbi9weS1icmVha3BvaW50LmMKaW5kZXggZGFjZWI5OS4uNmQxYzZjMSAx MDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKKysrIGIv Z2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKQEAgLTMxLDUyICszMSwxOCBA QAogI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKICNpbmNsdWRlICJsYW5ndWFn ZS5oIgogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0 X3R5cGU7CitQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZTsK IAogLyogTnVtYmVyIG9mIGxpdmUgYnJlYWtwb2ludHMuICAqLwogc3RhdGlj IGludCBicHB5X2xpdmU7CiAKIC8qIFZhcmlhYmxlcyB1c2VkIHRvIHBhc3Mg aW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgQnJlYWtwb2ludAogICAgY29uc3Ry dWN0b3IgYW5kIHRoZSBicmVha3BvaW50LWNyZWF0ZWQgaG9vayBmdW5jdGlv bi4gICovCi1zdGF0aWMgYnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGlu Z19vYmplY3Q7CiticmVha3BvaW50X29iamVjdCAqYnBweV9wZW5kaW5nX29i amVjdDsKIAogLyogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhIFB5 dGhvbiBjb25kaXRpb24gaXMgZXZhbHVhdGVkLiAgKi8KIHN0YXRpYyBjaGFy ICogY29uc3Qgc3RvcF9mdW5jID0gInN0b3AiOwogCi1zdHJ1Y3QgYnJlYWtw b2ludF9vYmplY3QKLXsKLSAgUHlPYmplY3RfSEVBRAotCi0gIC8qIFRoZSBi cmVha3BvaW50IG51bWJlciBhY2NvcmRpbmcgdG8gZ2RiLiAgKi8KLSAgaW50 IG51bWJlcjsKLQotICAvKiBUaGUgZ2RiIGJyZWFrcG9pbnQgb2JqZWN0LCBv ciBOVUxMIGlmIHRoZSBicmVha3BvaW50IGhhcyBiZWVuCi0gICAgIGRlbGV0 ZWQuICAqLwotICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnA7Ci19OwotCi0vKiBS ZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQg SUQ7IHRocm93IGEgUHl0aG9uCi0gICBleGNlcHRpb24gaWYgaXQgaXMgaW52 YWxpZC4gICovCi0jZGVmaW5lIEJQUFlfUkVRVUlSRV9WQUxJRChCcmVha3Bv aW50KQkJCQkJXAotICAgIGRvIHsJCQkJCQkJCVwKLSAgICAgIGlmICgoQnJl YWtwb2ludCktPmJwID09IE5VTEwpCQkJCQlcCi0JcmV0dXJuIFB5RXJyX0Zv cm1hdCAoUHlFeGNfUnVudGltZUVycm9yLCAgICAgICAgICAgICAgICAgICAg ICAgIFwKLQkJCSAgICAgXygiQnJlYWtwb2ludCAlZCBpcyBpbnZhbGlkLiIp LAkJXAotCQkJICAgICAoQnJlYWtwb2ludCktPm51bWJlcik7CQkJXAotICAg IH0gd2hpbGUgKDApCi0KLS8qIFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJl IGEgdmFsaWQgYnJlYWtwb2ludCBJRDsgdGhyb3cgYSBQeXRob24KLSAgIGV4 Y2VwdGlvbiBpZiBpdCBpcyBpbnZhbGlkLiAgVGhpcyBtYWNybyBpcyBmb3Ig dXNlIGluIHNldHRlciBmdW5jdGlvbnMuICAqLwotI2RlZmluZSBCUFBZX1NF VF9SRVFVSVJFX1ZBTElEKEJyZWFrcG9pbnQpCQkJCVwKLSAgICBkbyB7CQkJ CQkJCQlcCi0gICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKQkJ CQkJXAotICAgICAgICB7CQkJCQkJCQlcCi0JICBQeUVycl9Gb3JtYXQgKFB5 RXhjX1J1bnRpbWVFcnJvciwgXygiQnJlYWtwb2ludCAlZCBpcyBpbnZhbGlk LiIpLCBcCi0JCQkoQnJlYWtwb2ludCktPm51bWJlcik7CQkJCVwKLQkgIHJl dHVybiAtMTsJCQkJCQkJXAotCX0JCQkJCQkJCVwKLSAgICB9IHdoaWxlICgw KQotCiAvKiBUaGlzIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB2YXJpb3VzIGdk Yi5icF8qIGNvbnN0YW50cy4gICovCiBzdHJ1Y3QgcHlicF9jb2RlCiB7CkBA IC03NTcsNiArNzIzLDE1IEBAIGdkYnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3Qg YnJlYWtwb2ludF9vYmplY3QgKmJwX29iaikKICAgICAgIGVsc2UKIAlnZGJw eV9wcmludF9zdGFjayAoKTsKICAgICB9CisKKyAgLyogSWYgaXQncyBhIHRl bXBvcmFyeSBicmVha3BvaW50LiAgKi8KKyAgaWYgKGJwZmluaXNocHlfaXNf ZmluaXNoX2JwKHB5X2JwKSkKKyAgICB7CisgICAgICAvKiBDYW4ndCBkZWxl dGUgaXQgaGVyZS4gICovCisgICAgICBnZGJfYXNzZXJ0IChiLT5kaXNwb3Np dGlvbiA9PSBkaXNwX2RlbCk7CisgICAgICBkaXNhYmxlX2JyZWFrcG9pbnQg KGIpOworICAgIH0KKwogICBkb19jbGVhbnVwcyAoY2xlYW51cCk7CiAKICAg cmV0dXJuIHN0b3A7CkBAIC04MjEsNiArNzk2LDggQEAgZ2RicHlfYnJlYWtw b2ludF9jcmVhdGVkIChzdHJ1Y3QgYnJlYWtwb2ludCAqYnApCiAgICAgICBu ZXdicC0+YnAtPnB5X2JwX29iamVjdCA9IG5ld2JwOwogICAgICAgUHlfSU5D UkVGIChuZXdicCk7CiAgICAgICArK2JwcHlfbGl2ZTsKKworICAgICAgbmV3 YnAtPmlzX2ZpbmlzaF9icCA9IGJwZmluaXNocHlfaXNfZmluaXNoX2JwICgo UHlPYmplY3QgKikgbmV3YnApOwogICAgIH0KICAgZWxzZQogICAgIHsKQEAg LTk4MCw3ICs5NTcsNyBAQCBzdGF0aWMgUHlNZXRob2REZWYgYnJlYWtwb2lu dF9vYmplY3RfbWV0aG9kc1tdID0KICAgeyBOVUxMIH0gLyogU2VudGluZWwu ICAqLwogfTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBicmVha3BvaW50X29i amVjdF90eXBlID0KK1B5VHlwZU9iamVjdCBicmVha3BvaW50X29iamVjdF90 eXBlID0KIHsKICAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxMKQogICAwLAkJ CQkgIC8qb2Jfc2l6ZSovCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWZp bmlzaGJyZWFrcG9pbnQuYyBiL2dkYi9weXRob24vcHktZmluaXNoYnJlYWtw b2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1 OGYxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL3B5LWZpbmlz aGJyZWFrcG9pbnQuYwpAQCAtMCwwICsxLDQwNCBAQAorLyogUHl0aG9uIGlu dGVyZmFjZSB0byBmaW5pc2ggYnJlYWtwb2ludHMKKworICAgQ29weXJpZ2h0 IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1 ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJweXRob24taW50ZXJuYWwu aCIKKyNpbmNsdWRlICJicmVha3BvaW50LmgiCisjaW5jbHVkZSAiZnJhbWUu aCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNsdWRlICJhcmNoLXV0 aWxzLmgiCisjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJvYnNl cnZlci5oIgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisKK3N0YXRpYyBQeVR5 cGVPYmplY3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGU7CisKKy8q IEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBQeXRob24gZmluaXNo IGJwIGlzIGZvdW5kIG91dCBvZiBzY29wZS4gICovCitzdGF0aWMgY2hhciAq IGNvbnN0IG91dG9mc2NvcGVfZnVuYyA9ICJvdXRfb2Zfc2NvcGUiOworCisv KiBzdHJ1Y3QgaW1wbGVtZW50aW5nIHRoZSBnZGIuRmluaXNoQnJlYWtwb2lu dCBvYmplY3QgYnkgZXh0ZW5kaW5nCisgICB0aGUgZ2RiLkJyZWFrcG9pbnQg Y2xhc3MuICAqLworc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdAor eworICAvKiBnZGIuQnJlYWtwb2ludCBiYXNlIGNsYXNzLiAgKi8KKyAgYnJl YWtwb2ludF9vYmplY3QgcHlfYnA7CisgIC8qIGdkYi5UeXBlIG9iamVjdCBv ZiB0aGUgZnVuY3Rpb24gZmluaXNoZWQgYnkgdGhpcyBicmVha3BvaW50LiAg Ki8KKyAgUHlPYmplY3QgKmZ1bmN0aW9uX3R5cGU7CisgIC8qIGdkYi5UeXBl IG9iamVjdCBvZiB0aGUgdmFsdWUgcmV0dXJuIGJ5IHRoZSBicmVha3BvaW50 ZWQgZnVuY3Rpb24uICAqLworICBQeU9iamVjdCAqcmV0dXJuX3R5cGU7Cisg IC8qIFdoZW4gc3RvcHBlZCBhdCB0aGlzIEZpbmlzaEJyZWFrcG9pbnQsIHZh bHVlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbjsKKyAgICAgUHlfTm9uZSBp ZiB0aGUgdmFsdWUgaXMgbm90IGNvbXB1dGFibGU7IE5VTEwgaWYgR0RCIGlz IG5vdCBzdG9wcGVkIGF0CisgICAgIGEgRmluaXNoQnJlYWtwb2ludC4gICov CisgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7Cit9OworCisvKiBUcmlnZ2Vy ZWQgd2hlbiBHREIgc3RvcHMgYXQgUFlfQlAuIENvbXB1dGVzIGFuZCBjYWNo ZXMgdGhlIGByZXR1cm5fdmFsdWUnLAorICAgaWYgcG9zc2libGUuICAqLwor CitzdGF0aWMgdm9pZAorYnBmaW5pc2hfc3RvcHBlZF9hdF9maW5pc2hfYnAg KHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKnB5X2JwKQorewor ICBpZiAocHlfYnAtPnJldHVybl90eXBlKQorICAgIHsKKyAgICAgIHN0cnVj dCB2YWx1ZSAqcmV0ID0KKyAgICAgICAgICBnZXRfcmV0dXJuX3ZhbHVlICh0 eXBlX29iamVjdF90b190eXBlIChweV9icC0+ZnVuY3Rpb25fdHlwZSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9vYmplY3RfdG9fdHlw ZSAocHlfYnAtPnJldHVybl90eXBlKSk7CisgICAgICBpZiAocmV0KQorICAg ICAgICB7CisgICAgICAgICAgcHlfYnAtPnJldHVybl92YWx1ZSA9IHZhbHVl X3RvX3ZhbHVlX29iamVjdCAocmV0KTsKKyAgICAgICAgfQorICAgICAgZWxz ZQorICAgICAgICBweV9icC0+cmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKKyAg ICB9Cit9CisKKy8qIFB5dGhvbiBmdW5jdGlvbiB0byBnZXQgdGhlICdyZXR1 cm5fdmFsdWUnIGF0dHJpYnV0ZSBvZgorICAgRmluaXNoQnJlYWtwb2ludC4g ICovCisKK3N0YXRpYyBQeU9iamVjdCAqCiticGZpbmlzaHB5X2dldF9yZXR1 cm52YWx1ZSAoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7Cisg IHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfZmluaXNo YnAgPQorICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3Qg Kikgc2VsZjsKKworICBpZiAoc2VsZl9maW5pc2hicC0+cmV0dXJuX3R5cGUg PT0gTlVMTCkKKyAgICBQeV9SRVRVUk5fTk9ORTsKKworICAvKiBDaGVjayBp ZiB3ZSBoYXZlIGEgY2FjaGVkIHZhbHVlLiAgKi8KKyAgaWYgKCFzZWxmX2Zp bmlzaGJwLT5yZXR1cm5fdmFsdWUpCisgICAgeworICAgICAgYnBzdGF0IGJz OworCisgICAgICBCUFBZX1JFUVVJUkVfVkFMSUQgKCZzZWxmX2ZpbmlzaGJw LT5weV9icCk7CisKKyAgICAgIGZvciAoYnMgPSBpbmZlcmlvcl90aHJlYWQg KCktPmNvbnRyb2wuc3RvcF9icHN0YXQ7CisgICAgICAgICAgYnM7IGJzID0g YnMtPm5leHQpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgYnJlYWtw b2ludCAqYnAgPSBicy0+YnJlYWtwb2ludF9hdDsKKworICAgICAgICAgIGlm IChicCAhPSBOVUxMICYmIChQeU9iamVjdCAqKSBicC0+cHlfYnBfb2JqZWN0 ID09IHNlbGYpCisgICAgICAgICAgICAgIGJwZmluaXNoX3N0b3BwZWRfYXRf ZmluaXNoX2JwIChzZWxmX2ZpbmlzaGJwKTsKKyAgICAgICAgfQorICAgIH0K KworICBpZiAoIXNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSkKKyAgICBQ eV9SRVRVUk5fTk9ORTsKKworICBQeV9JTkNSRUYgKHNlbGZfZmluaXNoYnAt PnJldHVybl92YWx1ZSk7CisgIHJldHVybiBzZWxmX2ZpbmlzaGJwLT5yZXR1 cm5fdmFsdWU7Cit9CisKKy8qIElmIFNUT1BfQlBTVEFUIGNvbnRhaW5zIGEg UHl0aG9uIGJyZWFrcG9pbnQgd2hvc2UgdHlwZSBpcyBUWVBFLCByZXR1cm5z CisgICB0aGlzIGJyZWFrcG9pbnQuIFJldHVybnMgTlVMTCBvdGhlcndpc2Uu ICAqLworCitzdHJ1Y3QgYnJlYWtwb2ludCAqCitnZGJweV9pc19zdG9wcGVk X2F0X2ZpbmlzaF9icCAoYnBzdGF0IHN0b3BfYnBzdGF0KQoreworICBicHN0 YXQgYnM7CisKKyAgZm9yIChicyA9IHN0b3BfYnBzdGF0OyBiczsgYnMgPSBi cy0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoYnMtPmJyZWFrcG9pbnRfYXQK KyAgICAgICAgICAmJiBicGZpbmlzaHB5X2JwX2lzX2ZpbmlzaF9icCAoKGJy ZWFrcG9pbnRfb2JqZWN0ICopCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJzLT5icmVha3BvaW50X2F0LT5weV9icF9vYmpl Y3QpKQorICAgICAgICByZXR1cm4gYnMtPmJyZWFrcG9pbnRfYXQ7CisgICAg fQorCisgIHJldHVybiBOVUxMOworfQorCisvKiBQeXRob24gZnVuY3Rpb24g dG8gY3JlYXRlIGEgbmV3IGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgaW50 CiticGZpbmlzaHB5X2luaXQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq YXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgc3RhdGljIGNoYXIgKmtl eXdvcmRzW10gPSB7ICJmcmFtZSIsICJpbnRlcm5hbCIsIE5VTEwgfTsKKyAg YnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnAgPSAoYnJlYWtwb2ludF9vYmpl Y3QgKikgc2VsZjsKKyAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVj dCAqc2VsZl9icGZpbmlzaCA9CisgICAgICAoc3RydWN0IGZpbmlzaF9icmVh a3BvaW50X29iamVjdCAqKSBzZWxmOworICBpbnQgdHlwZSA9IGJwX2JyZWFr cG9pbnQ7CisgIFB5T2JqZWN0ICpmcmFtZV9vYmogPSBOVUxMOworICBzdHJ1 Y3QgZnJhbWVfaW5mbyAqZnJhbWUsICpwcmV2X2ZyYW1lOworICBzdHJ1Y3Qg ZnJhbWVfaWQgZnJhbWVfaWQ7CisgIFB5T2JqZWN0ICppbnRlcm5hbCA9IE5V TEw7CisgIGludCBpbnRlcm5hbF9icCA9IDA7CisgIENPUkVfQUREUiBmaW5p c2hfcGMsIHBjOworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBl eGNlcHQ7CisgIGNoYXIgKmFkZHJfc3RyLCBzbWFsbF9idWZbMTAwXTsKKyAg c3RydWN0IHN5bWJvbCAqZnVuY3Rpb247CisKKyAgaWYgKCEgUHlBcmdfUGFy c2VUdXBsZUFuZEtleXdvcmRzIChhcmdzLCBrd2FyZ3MsICJPfE8iLCBrZXl3 b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZnJhbWVfb2JqLCAmaW50ZXJuYWwpKQorICAgIHJldHVybiAtMTsKKworICBp ZiAoIWZyYW1lX29iaikKKyAgICBnb3RvIGludmFsaWRfZnJhbWU7CisgIAor ICBmcmFtZSA9IGZyYW1lX29iamVjdF90b19mcmFtZV9pbmZvIChmcmFtZV9v YmopOworICBpZiAoZnJhbWUgPT0gTlVMTCkKKyAgICBnb3RvIGludmFsaWRf ZnJhbWU7CisgIAorICBwcmV2X2ZyYW1lID0gZ2V0X3ByZXZfZnJhbWUgKGZy YW1lKTsKKyAgaWYgKHByZXZfZnJhbWUgPT0gMCkKKyAgICB7CisgICAgICBQ eUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsIAorICAgICAgICAg ICBfKCJcIkZpbmlzaEJyZWFrcG9pbnRcIiBub3QgbWVhbmluZ2Z1bCBpbiB0 aGUgb3V0ZXJtb3N0IGZyYW1lLiIpKTsKKyAgICAgIHJldHVybiAtMTsKKyAg ICB9CisgIGVsc2UgaWYgKGdldF9mcmFtZV90eXBlKHByZXZfZnJhbWUpID09 IERVTU1ZX0ZSQU1FKQorICAgICAgeworICAgICAgICBQeUVycl9TZXRTdHJp bmcgKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICBfKCJc IkZpbmlzaEJyZWFrcG9pbnRcIiBjYW5ub3QgYmUgc2V0IG9uIGEgZHVtbXkg ZnJhbWUuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisKKyAg ZnJhbWVfaWQgPSBnZXRfZnJhbWVfaWQgKHByZXZfZnJhbWUpOworICBpZiAo ZnJhbWVfaWRfZXEgKGZyYW1lX2lkLCBudWxsX2ZyYW1lX2lkKSkKKyAgICBn b3RvIGludmFsaWRfZnJhbWU7CisKKyAgaWYgKGludGVybmFsKQorICAgIHsK KyAgICAgIGludGVybmFsX2JwID0gUHlPYmplY3RfSXNUcnVlIChpbnRlcm5h bCk7CisgICAgICBpZiAoaW50ZXJuYWxfYnAgPT0gLTEpIAorICAgICAgICB7 CisgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9y LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSB2YWx1ZSBv ZiBgaW50ZXJuYWwnIG11c3QgYmUgYSBib29sZWFuLiIpKTsKKyAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogRmluZCB0 aGUgZnVuY3Rpb24gd2Ugd2lsbCByZXR1cm4gZnJvbS4gICovCisgIHNlbGZf YnBmaW5pc2gtPnJldHVybl90eXBlID0gTlVMTDsKKyAgc2VsZl9icGZpbmlz aC0+ZnVuY3Rpb25fdHlwZSA9IE5VTEw7CisgIGlmIChnZXRfZnJhbWVfcGNf aWZfYXZhaWxhYmxlIChmcmFtZSwgJnBjKSkKKyAgICB7CisgICAgICBmdW5j dGlvbiA9IGZpbmRfcGNfZnVuY3Rpb24gKHBjKTsKKyAgICAgIGlmIChmdW5j dGlvbiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IHR5 cGUgKnJldF90eXBlID0gVFlQRV9UQVJHRVRfVFlQRSAoU1lNQk9MX1RZUEUg KGZ1bmN0aW9uKSk7CisKKyAgICAgICAgICAvKiBSZW1lbWJlciBvbmx5IG5v bi1WT0lEIHJldHVybiB0eXBlcy4gICovCisgICAgICAgICAgaWYgKFRZUEVf Q09ERSAocmV0X3R5cGUpICE9IFRZUEVfQ09ERV9WT0lEKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlw ZSA9IHR5cGVfdG9fdHlwZV9vYmplY3QgKHJldF90eXBlKTsKKyAgICAgICAg ICAgICAgc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSA9CisgICAgICAg ICAgICAgICAgICB0eXBlX3RvX3R5cGVfb2JqZWN0IChTWU1CT0xfVFlQRSAo ZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KworICBicHB5X3BlbmRpbmdfb2JqZWN0ID0gc2VsZl9icDsKKyAgYnBweV9w ZW5kaW5nX29iamVjdC0+bnVtYmVyID0gLTE7CisgIGJwcHlfcGVuZGluZ19v YmplY3QtPmJwID0gTlVMTDsKKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVU VVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIC8qIFNldCBhIGJyZWFrcG9p bnQgb24gdGhlIHJldHVybiBhZGRyZXNzLiAgKi8KKyAgICAgIGZpbmlzaF9w YyA9IGdldF9mcmFtZV9wYyAocHJldl9mcmFtZSk7CisgICAgICBzcHJpbnRm IChzbWFsbF9idWYsICIqJXMiLCBoZXhfc3RyaW5nIChmaW5pc2hfcGMpKTsK KyAgICAgIGFkZHJfc3RyID0gc21hbGxfYnVmOworCisgICAgICBjcmVhdGVf YnJlYWtwb2ludCAocHl0aG9uX2dkYmFyY2gsCisgICAgICAgICAgICAgICAg ICAgICAgICAgYWRkcl9zdHIsIE5VTEwsIC0xLAorICAgICAgICAgICAgICAg ICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgMSAvKnRl bXBfZmxhZyovLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJwX2JyZWFr cG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBBVVRPX0JPT0xFQU5fVFJVRSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAmYmtwdF9icmVha3BvaW50X29wcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAwLCAxLCBpbnRlcm5hbF9icCk7CisgICAg fQorICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisgICAgeworICAgICAgUHlF cnJfRm9ybWF0IChleGNlcHQucmVhc29uID09IFJFVFVSTl9RVUlUCisgICAg ICAgICAgICAgICAgICAgID8gUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgOiBQ eUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICIlcyIs IGV4Y2VwdC5tZXNzYWdlKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9Cisg IEJQUFlfU0VUX1JFUVVJUkVfVkFMSUQgKHNlbGZfYnApOworICAKKyAgc2Vs Zl9icC0+YnAtPmZyYW1lX2lkID0gZnJhbWVfaWQ7CisgIAorICByZXR1cm4g MDsKKyAgCisgaW52YWxpZF9mcmFtZToKKyAgUHlFcnJfU2V0U3RyaW5nIChQ eUV4Y19WYWx1ZUVycm9yLCAKKyAgICAgICAgICAgICAgICAgICBfKCJJbnZh bGlkIElEIGZvciB0aGUgYGZyYW1lJyBvYmplY3QuIikpOworICByZXR1cm4g LTE7Cit9CisKKy8qIFJldHVybnMgMSBpZiBPQkogaXMgbm90IE5VTEwgYW5k IHJlZmVyZW5jZXMgYSBGaW5pc2hCcmVha3BvaW50IG9iamVjdC4gICovCisK K2ludAorYnBmaW5pc2hweV9pc19maW5pc2hfYnAgKFB5T2JqZWN0ICpvYmop Cit7CisgIHJldHVybiBvYmogIT0gTlVMTAorICAgICAgICAgJiYgUHlPYmpl Y3RfVHlwZUNoZWNrIChvYmosICZmaW5pc2hfYnJlYWtwb2ludF9vYmplY3Rf dHlwZSk7Cit9CisKKy8qIFJldHVybnMgMSBpZiBQWV9PQkogaXMgbm90IE5V TEwgYW5kIHJlZmVyZW5jZXMgYSBGaW5pc2hCcmVha3BvaW50IG9iamVjdC4K KyAgIFRoaXMgdmVyc2lvbiBkb2Vzbid0IGFzc3VtZSB0aGF0IEdJTCBoYXMg YmVlbiBhY3F1aXJlZC4gICovCisKK2ludAorYnBmaW5pc2hweV9icF9pc19m aW5pc2hfYnAgKGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCit7CisgIHJl dHVybiBicF9vYmogIT0gTlVMTAorICAgICAgICAgJiYgYnBfb2JqLT5pc19m aW5pc2hfYnA7Cit9CisKKy8qIENhbGxlZCB3aGVuIEdEQiBub3RpY2VzIHRo YXQgdGhlIGZpbmlzaCBicmVha3BvaW50IEJQX09CSiBpcyBvdXQgb2YKKyAg IHRoZSBjdXJyZW50IGNhbGxzdGFjay4gVHJpZ2dlcnMgdGhlIG1ldGhvZCBP VVRfT0ZfU0NPUEUgaWYgaW1wbGVtZW50ZWQsCisgICB0aGVuIGRlbGV0ZSB0 aGUgYnJlYWtwb2ludC4gICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5 X291dF9vZl9zY29wZSAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVj dCAqYnBmaW5pc2hfb2JqKQoreworICBicmVha3BvaW50X29iamVjdCAqYnBf b2JqID0gKGJyZWFrcG9pbnRfb2JqZWN0ICopIGJwZmluaXNoX29iajsKKyAg UHlPYmplY3QgKnB5X29iaiA9IChQeU9iamVjdCAqKSBicF9vYmo7CisKKyAg aWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcgKHB5X29iaiwgb3V0b2ZzY29w ZV9mdW5jKSkKKyAgICB7CisgICAgICBpZiAoIVB5T2JqZWN0X0NhbGxNZXRo b2QgKHB5X29iaiwgb3V0b2ZzY29wZV9mdW5jLCBOVUxMKSkKKyAgICAgICAg ICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICB9CisKKyAgZGVsZXRlX2Jy ZWFrcG9pbnQgKGJwZmluaXNoX29iai0+cHlfYnAuYnApOworfQorCisvKiBD YWxsYmFjayBmb3IgYGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZScuICBU cmlnZ2VycyBQeXRob24ncworICAgYEItPm91dF9vZl9zY29wZScgZnVuY3Rp b24gaWYgQiBpcyBhIEZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIGl0cworICAg c2NvcGUgb3IgdHVybiBvZiBvdXRfb2Zfc2NvcGUgbm90aWZpY2F0aW9uIGlm IEIgaGFzIGJlZW4gaGl0LiAgKi8KKworc3RhdGljIGludAorYnBmaW5pc2hw eV9kZXRlY3Rfb3V0X3Njb3BlX2NiIChzdHJ1Y3QgYnJlYWtwb2ludCAqYiwg dm9pZCAqYXJncykKK3sKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJwX3N0b3Bw ZWQgPSAoc3RydWN0IGJyZWFrcG9pbnQgKikgYXJnczsKKyAgUHlPYmplY3Qg KnB5X2JwID0gKFB5T2JqZWN0ICopIGItPnB5X2JwX29iamVjdDsKKyAgc3Ry dWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJjaCA/IGItPmdkYmFyY2gg OiBnZXRfY3VycmVudF9hcmNoICgpOworICBzdHJ1Y3QgY2xlYW51cCAqY2xl YW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVudF9sYW5n dWFnZSk7CisgIAorICAvKiBUcmlnZ2VyIG91dF9vZl9zY29wZSBpZiB0aGlz IGlzIGEgRmluaXNoQnJlYWtwb2ludCBhbmQgaXRzIGZyYW1lIGlzCisgICAg IG5vdCBhbnltb3JlIGluIHRoZSBjdXJyZW50IGNhbGxzdGFjay4gICovCisg IGlmIChicGZpbmlzaHB5X2lzX2ZpbmlzaF9icCAocHlfYnApKQorICAgIHsK KyAgICAgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmZpbmlz aF9icCA9CisgICAgICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9v YmplY3QgKikgcHlfYnA7CisKKyAgICAgIGlmIChiID09IGJwX3N0b3BwZWQp CisgICAgICAgIGJwZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2JwIChmaW5p c2hfYnApOworICAgICAgZWxzZSBpZiAoYi0+cHNwYWNlID09IGN1cnJlbnRf aW5mZXJpb3IoKS0+cHNwYWNlCisgICAgICAgICAgICYmICghdGFyZ2V0X2hh c19yZWdpc3RlcnMKKyAgICAgICAgICAgICAgIHx8IGZyYW1lX2ZpbmRfYnlf aWQoYi0+ZnJhbWVfaWQpID09IE5VTEwpKQorICAgICAgICB7CisgICAgICAg ICAgYnBmaW5pc2hweV9vdXRfb2Zfc2NvcGUgKGZpbmlzaF9icCk7CisgICAg ICAgIH0KKyAgICB9CisgIAorICBkb19jbGVhbnVwcyAoY2xlYW51cCk7Cisg IAorICByZXR1cm4gMDsKK30KKworLyogQXR0YWNoZWQgdG8gYHN0b3AnIG5v dGlmaWNhdGlvbnMsIGNoZWNrIGlmIHRoZSBleGVjdXRpb24gaGFzIHJ1biBv dXRnCisgICBvdXQgb2YgdGhlIHNjb3BlIG9mIGFueSBGaW5pc2hCcmVha3Bv aW50IGJlZm9yZSBpdCBoYXMgYmVlbiBoaXQuICAqLworCitzdGF0aWMgdm9p ZAorYnBmaW5pc2hweV9oYW5kbGVfc3RvcCAoc3RydWN0IGJwc3RhdHMgKmJz LCBpbnQgcHJpbnRfZnJhbWUpCit7CisgIGl0ZXJhdGVfb3Zlcl9icmVha3Bv aW50cyAoYnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJzID09IE5VTEwgPyBOVUxMIDogYnMt PmJyZWFrcG9pbnRfYXQpOworfQorCisvKiBBdHRhY2hlZCB0byBgZXhpdCcg bm90aWZpY2F0aW9ucywgdHJpZ2dlcnMgYWxsIHRoZSBuZWNlc3Nhcnkgb3V0 IG9mCisgICBzY29wZSBub3RpZmljYXRpb25zLiAgKi8KKworc3RhdGljIHZv aWQKK2JwZmluaXNocHlfaGFuZGxlX2V4aXQgKHN0cnVjdCBpbmZlcmlvciAq aW5mKQoreworICBpdGVyYXRlX292ZXJfYnJlYWtwb2ludHMgKGJwZmluaXNo cHlfZGV0ZWN0X291dF9zY29wZV9jYiwgTlVMTCk7Cit9CisKKy8qIEluaXRp YWxpemUgdGhlIFB5dGhvbiBmaW5pc2ggYnJlYWtwb2ludCBjb2RlLiAgKi8K Kwordm9pZAorZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAo dm9pZCkKK3sKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJmZpbmlzaF9icmVha3Bv aW50X29iamVjdF90eXBlKSA8IDApCisgICAgICByZXR1cm47CisgIAorICBQ eV9JTkNSRUYgKCZmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSk7Cisg IFB5TW9kdWxlX0FkZE9iamVjdCAoZ2RiX21vZHVsZSwgIkZpbmlzaEJyZWFr cG9pbnQiLAorICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSAm ZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUpOworICAgIAorICBvYnNl cnZlcl9hdHRhY2hfbm9ybWFsX3N0b3AgKGJwZmluaXNocHlfaGFuZGxlX3N0 b3ApOworICBvYnNlcnZlcl9hdHRhY2hfaW5mZXJpb3JfZXhpdCAoYnBmaW5p c2hweV9oYW5kbGVfZXhpdCk7Cit9CisKK3N0YXRpYyBQeUdldFNldERlZiBm aW5pc2hfYnJlYWtwb2ludF9vYmplY3RfZ2V0c2V0W10gPSB7CisgIHsgInJl dHVybl92YWx1ZSIsIGJwZmluaXNocHlfZ2V0X3JldHVybnZhbHVlLCBOVUxM LAorICAiZ2RiLlZhbHVlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJldHVy biB2YWx1ZSwgaWYgYW55LiBcCitOb25lIG90aGVyd2lzZS4iLCBOVUxMIH0s CisgICAgeyBOVUxMIH0gIC8qIFNlbnRpbmVsLiAgKi8KK307CisKK3N0YXRp YyBQeVR5cGVPYmplY3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUg PQoreworICBQeU9iamVjdF9IRUFEX0lOSVQgKE5VTEwpCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLypvYl9zaXplKi8KKyAgImdkYi5G aW5pc2hCcmVha3BvaW50IiwgICAgICAgICAvKnRwX25hbWUqLworICBzaXpl b2YgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QpLCAgLyp0cF9i YXNpY3NpemUqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qdHBfaXRlbXNpemUqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qdHBfZGVhbGxvYyovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyp0cF9wcmludCovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJl ciovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9h c19zZXF1ZW5jZSovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIq LworICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBF LCAgLyp0cF9mbGFncyovCisgICJHREIgZmluaXNoIGJyZWFrcG9pbnQgb2Jq ZWN0IiwgLyogdHBfZG9jICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xp c3RvZmZzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9pdGVyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICBmaW5p c2hfYnJlYWtwb2ludF9vYmplY3RfZ2V0c2V0LC8qIHRwX2dldHNldCAqLwor ICAmYnJlYWtwb2ludF9vYmplY3RfdHlwZSwgICAgICAgIC8qIHRwX2Jhc2Ug Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9k aWN0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfZGVzY3JfZ2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICBicGZpbmlz aHB5X2luaXQsICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwor ICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAq LworfTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktZnJhbWUuYyBiL2dk Yi9weXRob24vcHktZnJhbWUuYwppbmRleCAzOThjZTg0Li5jNDQ5NGNiIDEw MDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LWZyYW1lLmMKKysrIGIvZ2RiL3B5 dGhvbi9weS1mcmFtZS5jCkBAIC02MCw5ICs2MCwxMCBAQCBzdGF0aWMgUHlU eXBlT2JqZWN0IGZyYW1lX29iamVjdF90eXBlOwogICAgb2JqZWN0LiAgSWYg dGhlIGZyYW1lIGRvZXNuJ3QgZXhpc3QgYW55bW9yZSAodGhlIGZyYW1lIGlk IGRvZXNuJ3QKICAgIGNvcnJlc3BvbmQgdG8gYW55IGZyYW1lIGluIHRoZSBp bmZlcmlvciksIHJldHVybnMgTlVMTC4gICovCiAKLXN0YXRpYyBzdHJ1Y3Qg ZnJhbWVfaW5mbyAqCi1mcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoZnJh bWVfb2JqZWN0ICpmcmFtZV9vYmopCitzdHJ1Y3QgZnJhbWVfaW5mbyAqCitm cmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoUHlPYmplY3QgKm9iaikKIHsK KyAgZnJhbWVfb2JqZWN0ICpmcmFtZV9vYmogPSAoZnJhbWVfb2JqZWN0ICop IG9iajsgIAogICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CiAKICAgZnJh bWUgPSBmcmFtZV9maW5kX2J5X2lkIChmcmFtZV9vYmotPmZyYW1lX2lkKTsK QEAgLTEwMyw3ICsxMDQsNyBAQCBmcmFweV9pc192YWxpZCAoUHlPYmplY3Qg KnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICBzdHJ1Y3QgZnJhbWVfaW5m byAqZnJhbWU7CiAKLSAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJhbWVf aW5mbyAoKGZyYW1lX29iamVjdCAqKSBzZWxmKTsKKyAgZnJhbWUgPSBmcmFt ZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoc2VsZik7CiAgIGlmIChmcmFtZSA9 PSBOVUxMKQogICAgIFB5X1JFVFVSTl9GQUxTRTsKIApAQCAtMTI0LDcgKzEy NSw3IEBAIGZyYXB5X25hbWUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq YXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxM KQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9v YmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBmaW5kX2ZyYW1lX2Z1bm5h bWUgKGZyYW1lLCAmbmFtZSwgJmxhbmcsIE5VTEwpOwogICAgIH0KQEAgLTE1 Myw3ICsxNTQsNyBAQCBmcmFweV90eXBlIChQeU9iamVjdCAqc2VsZiwgUHlP YmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9N QVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgo ZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgdHlwZSA9IGdl dF9mcmFtZV90eXBlIChmcmFtZSk7CiAgICAgfQpAQCAtMTc0LDcgKzE3NSw3 IEBAIGZyYXB5X3Vud2luZF9zdG9wX3JlYXNvbiAoUHlPYmplY3QgKnNlbGYs IFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRV Uk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJ RCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQ WV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAgICAgfQogICBHREJf UFlfSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0KTsKIApAQCAtMTk1LDcgKzE5 Niw3IEBAIGZyYXB5X3BjIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy Z3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkK ICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2Jq ZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFM SUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgcGMgPSBnZXRfZnJhbWVfcGMg KGZyYW1lKTsKICAgICB9CkBAIC0yMTYsNyArMjE3LDcgQEAgZnJhcHlfYmxv Y2sgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllf Q0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwg ZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJh bWUpOwogICAgICAgYmxvY2sgPSBnZXRfZnJhbWVfYmxvY2sgKGZyYW1lLCBO VUxMKTsKICAgICB9CiAgIEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9OIChleGNl cHQpOwpAQCAtMjU3LDcgKzI1OCw3IEBAIGZyYXB5X2Z1bmN0aW9uIChQeU9i amVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChl eGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9S RVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsK KyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAog ICAgICAgc3ltID0gZmluZF9wY19mdW5jdGlvbiAoZ2V0X2ZyYW1lX2FkZHJl c3NfaW5fYmxvY2sgKGZyYW1lKSk7CiAgICAgfQpAQCAtMzE5LDcgKzMyMCw3 IEBAIGZyYXB5X29sZGVyIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy Z3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkK ICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2Jq ZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFM SUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgcHJldiA9IGdldF9wcmV2X2Zy YW1lIChmcmFtZSk7CiAgICAgICBpZiAocHJldikKQEAgLTM0OCw3ICszNDks NyBAQCBmcmFweV9uZXdlciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICph cmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwp CiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29i amVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZB TElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIG5leHQgPSBnZXRfbmV4dF9m cmFtZSAoZnJhbWUpOwogICAgICAgaWYgKG5leHQpCkBAIC0zNzcsNyArMzc4 LDcgQEAgZnJhcHlfZmluZF9zYWwgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFt ZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBmaW5kX2ZyYW1lX3Nh bCAoZnJhbWUsICZzYWwpOwogICAgICAgc2FsX29iaiA9IHN5bXRhYl9hbmRf bGluZV90b19zYWxfb2JqZWN0IChzYWwpOwpAQCAtNDMzLDcgKzQzNCw3IEBA IGZyYXB5X3JlYWRfdmFyIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy Z3MpCiAKICAgICAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19B TEwpCiAJewotCSAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVj dCAqKSBzZWxmLCBmcmFtZSk7CisJICBGUkFQWV9SRVFVSVJFX1ZBTElEIChz ZWxmLCBmcmFtZSk7CiAKIAkgIGlmICghYmxvY2spCiAJICAgIGJsb2NrID0g Z2V0X2ZyYW1lX2Jsb2NrIChmcmFtZSwgTlVMTCk7CkBAIC00NjEsNyArNDYy LDcgQEAgZnJhcHlfcmVhZF92YXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFt ZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICB2YWwgPSByZWFkX3Zh cl92YWx1ZSAodmFyLCBmcmFtZSk7CiAgICAgfQpAQCAtNDc2LDEyICs0Nzcs MTEgQEAgc3RhdGljIFB5T2JqZWN0ICoKIGZyYXB5X3NlbGVjdCAoUHlPYmpl Y3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICBzdHJ1Y3QgZnJhbWVf aW5mbyAqZmk7Ci0gIGZyYW1lX29iamVjdCAqZnJhbWUgPSAoZnJhbWVfb2Jq ZWN0ICopIHNlbGY7CiAgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9u IGV4Y2VwdDsKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKGZyYW1l LCBmaSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmaSk7 CiAKICAgICAgIHNlbGVjdF9mcmFtZSAoZmkpOwogICAgIH0KZGlmZiAtLWdp dCBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmggYi9nZGIvcHl0aG9u L3B5dGhvbi1pbnRlcm5hbC5oCmluZGV4IGU1OTM2MTIuLmY4OTliNzcgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgKKysrIGIv Z2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaApAQCAtMTIwLDkgKzEyMCw1 MCBAQCBleHRlcm4gUHlUeXBlT2JqZWN0IHN5bWJvbF9vYmplY3RfdHlwZTsK IGV4dGVybiBQeVR5cGVPYmplY3QgZXZlbnRfb2JqZWN0X3R5cGU7CiBleHRl cm4gUHlUeXBlT2JqZWN0IGV2ZW50c19vYmplY3RfdHlwZTsKIGV4dGVybiBQ eVR5cGVPYmplY3Qgc3RvcF9ldmVudF9vYmplY3RfdHlwZTsKK2V4dGVybiBQ eVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZTsKKwordHlwZWRl ZiBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QKK3sKKyAgUHlPYmplY3RfSEVB RAorCisgIC8qIFRoZSBicmVha3BvaW50IG51bWJlciBhY2NvcmRpbmcgdG8g Z2RiLiAgKi8KKyAgaW50IG51bWJlcjsKKworICAvKiBUaGUgZ2RiIGJyZWFr cG9pbnQgb2JqZWN0LCBvciBOVUxMIGlmIHRoZSBicmVha3BvaW50IGhhcyBi ZWVuCisgICAgIGRlbGV0ZWQuICAqLworICBzdHJ1Y3QgYnJlYWtwb2ludCAq YnA7CisKKyAgLyogMSBpcyB0aGlzIGlzIGEgRmluaXNoQnJlYWtwb2ludCBv YmplY3QsIDAgb3RoZXJ3aXNlLiAgKi8KKyAgaW50IGlzX2ZpbmlzaF9icDsK K30gYnJlYWtwb2ludF9vYmplY3Q7CisKKy8qIFJlcXVpcmUgdGhhdCBCUkVB S1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtwb2ludCBJRDsgdGhyb3cgYSBQeXRo b24KKyAgIGV4Y2VwdGlvbiBpZiBpdCBpcyBpbnZhbGlkLiAgKi8KKyNkZWZp bmUgQlBQWV9SRVFVSVJFX1ZBTElEKEJyZWFrcG9pbnQpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgIGlmICgoQnJlYWtwb2ludCktPmJwID09IE5VTEwp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgcmV0dXJuIFB5RXJyX0Zvcm1hdCAoUHlFeGNfUnVudGltZUVycm9yLCAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXygiQnJlYWtwb2ludCAlZCBpcyBpbnZhbGlkLiIpLCAgICAg ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJyZWFr cG9pbnQpLT5udW1iZXIpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9 IHdoaWxlICgwKQorCisvKiBSZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBh IHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93IGEgUHl0aG9uCisgICBleGNl cHRpb24gaWYgaXQgaXMgaW52YWxpZC4gIFRoaXMgbWFjcm8gaXMgZm9yIHVz ZSBpbiBzZXR0ZXIgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgQlBQWV9TRVRf UkVRVUlSRV9WQUxJRChCcmVha3BvaW50KSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgIGlmICgoQnJlYWtwb2ludCktPmJwID09IE5VTEwpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgICBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1 bnRpbWVFcnJvciwgXygiQnJlYWtwb2ludCAlZCBpcyBpbnZhbGlkLiIpLCBc CisgICAgICAgICAgICAgICAgICAgICAgICAoQnJlYWtwb2ludCktPm51bWJl cik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcmV0 dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgfSB3aGlsZSAoMCkKKworCisvKiBWYXJpYWJsZXMgdXNlZCB0byBw YXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIEJyZWFrcG9pbnQKKyAgIGNv bnN0cnVjdG9yIGFuZCB0aGUgYnJlYWtwb2ludC1jcmVhdGVkIGhvb2sgZnVu Y3Rpb24uICAqLworZXh0ZXJuIGJyZWFrcG9pbnRfb2JqZWN0ICpicHB5X3Bl bmRpbmdfb2JqZWN0OwogCi0vKiBEZWZpbmVkIGluIHB5LWJyZWFrcG9pbnQu YyAqLwotdHlwZWRlZiBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgYnJlYWtw b2ludF9vYmplY3Q7CiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0xODgsNiAr MjI5LDEwIEBAIHN0cnVjdCB2YWx1ZSAqY29udmVydF92YWx1ZV9mcm9tX3B5 dGhvbiAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3QgdHlwZSAqdHlwZV9vYmpl Y3RfdG9fdHlwZSAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3Qgc3ltdGFiICpz eW10YWJfb2JqZWN0X3RvX3N5bXRhYiAoUHlPYmplY3QgKm9iaik7CiBzdHJ1 Y3Qgc3ltdGFiX2FuZF9saW5lICpzYWxfb2JqZWN0X3RvX3N5bXRhYl9hbmRf bGluZSAoUHlPYmplY3QgKm9iaik7CitzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJh bWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5T2JqZWN0ICpmcmFtZV9vYmop OworCitpbnQgYnBmaW5pc2hweV9pc19maW5pc2hfYnAgKFB5T2JqZWN0ICpv YmopOworaW50IGJwZmluaXNocHlfYnBfaXNfZmluaXNoX2JwIChicmVha3Bv aW50X29iamVjdCAqYnBfb2JqKTsKIAogdm9pZCBnZGJweV9pbml0aWFsaXpl X2F1dG9fbG9hZCAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfdmFs dWVzICh2b2lkKTsKQEAgLTIwMiw2ICsyNDcsNyBAQCB2b2lkIGdkYnB5X2lu aXRpYWxpemVfZnVuY3Rpb25zICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlh bGl6ZV9wc3BhY2UgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX29i amZpbGUgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX2JyZWFrcG9p bnRzICh2b2lkKTsKK3ZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hicmVh a3BvaW50cyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfbGF6eV9z dHJpbmcgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3BhcmFtZXRl cnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3RocmVhZCAodm9p ZCk7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5jIGIvZ2RiL3B5 dGhvbi9weXRob24uYwppbmRleCBkZjhlM2Q1Li5kYjIzYmJmIDEwMDY0NAot LS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5jCisrKyBiL2dkYi9weXRob24vcHl0 aG9uLmMKQEAgLTEwNTQsNiArMTA1NCwxMSBAQCBnZGJweV9icmVha3BvaW50 X2hhc19weV9jb25kIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29i aikKIAkJICAgICJzY3JpcHRpbmcgaXMgbm90IHN1cHBvcnRlZC4iKSk7CiB9 CiAKK3N0cnVjdCBicmVha3BvaW50ICoKK2dkYnB5X2lzX3N0b3BwZWRfYXRf ZmluaXNoX2JwIChicHN0YXQgc3RvcF9icHN0YXQpCit7CisgIHJldHVybiBO VUxMOworfQogI2VuZGlmIC8qIEhBVkVfUFlUSE9OICovCiAKIAwKQEAgLTEy NDMsNiArMTI0OCw3IEBAIEVuYWJsZXMgb3IgZGlzYWJsZXMgcHJpbnRpbmcg b2YgUHl0aG9uIHN0YWNrIHRyYWNlcy4iKSwKICAgZ2RicHlfaW5pdGlhbGl6 ZV9wc3BhY2UgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfb2JqZmlsZSAoKTsK ICAgZ2RicHlfaW5pdGlhbGl6ZV9icmVha3BvaW50cyAoKTsKKyAgZ2RicHlf aW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAoKTsKICAgZ2RicHlfaW5p dGlhbGl6ZV9sYXp5X3N0cmluZyAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV90 aHJlYWQgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfaW5mZXJpb3IgKCk7CmRp ZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5oIGIvZ2RiL3B5dGhvbi9w eXRob24uaAppbmRleCBjZTBlYjM1Li5lMzQxZDc2IDEwMDY0NAotLS0gYS9n ZGIvcHl0aG9uL3B5dGhvbi5oCisrKyBiL2dkYi9weXRob24vcHl0aG9uLmgK QEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgR0RCX1BZVEhPTl9ICiAKICNp bmNsdWRlICJ2YWx1ZS5oIgorI2luY2x1ZGUgImJyZWFrcG9pbnQuaCIKIAog c3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0OwogCkBAIC00Nyw0ICs0OCw1IEBA IGludCBnZGJweV9zaG91bGRfc3RvcCAoc3RydWN0IGJyZWFrcG9pbnRfb2Jq ZWN0ICpicF9vYmopOwogCiBpbnQgZ2RicHlfYnJlYWtwb2ludF9oYXNfcHlf Y29uZCAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopOwogCitz dHJ1Y3QgYnJlYWtwb2ludCAqZ2RicHlfaXNfc3RvcHBlZF9hdF9maW5pc2hf YnAgKGJwc3RhdCBzdG9wX2Jwc3RhdCk7CiAjZW5kaWYgLyogR0RCX1BZVEhP Tl9IICovCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktYnJlYWtwb2ludC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktYnJlYWtwb2ludC5leHAKaW5kZXggZTBkZDA4Ny4uMGUzYWRiZCAxMDA2 NDQKLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9p bnQuZXhwCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVh a3BvaW50LmV4cApAQCAtNDQsNyArNDQsOCBAQCBnZGJfcHlfdGVzdF9zaWxl bnRfY21kICJweXRob24gYmxpc3QgPSBnZGIuYnJlYWtwb2ludHMoKSIgIkdl dCBCcmVha3BvaW50IExpc3QiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJs aXN0XFswXF0iICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAi Q2hlY2sgb2JqIGV4aXN0cyIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxp c3RcWzBcXS5sb2NhdGlvbiIgIm1haW4uIiAiQ2hlY2sgYnJlYWtwb2ludCBs b2NhdGlvbiIKIAotZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1i ZXIgIkJyZWFrIGF0IG11bHRpcGx5LiJdCitzZXQgbXVsdF9saW5lIFtnZGJf Z2V0X2xpbmVfbnVtYmVyICJCcmVhayBhdCBtdWx0aXBseS4iXQorZ2RiX2Jy ZWFrcG9pbnQgJHttdWx0X2xpbmV9CiBnZGJfY29udGludWVfdG9fYnJlYWtw b2ludCAiQnJlYWsgYXQgbXVsdGlwbHkuIgogCiAjIENoZWNrIHRoYXQgdGhl IFB5dGhvbiBicmVha3BvaW50IGNvZGUgbm90ZWQgdGhlIGFkZGl0aW9uIG9m IGEKQEAgLTU0LDcgKzU1LDkgQEAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBs ZW4oYmxpc3QpIiAiMiIgIkNoZWNrIGZvciB0d28gYnJlYWtwb2ludHMiCiBn ZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0iICI8Z2RiLkJyZWFr cG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sgb2JqIGV4aXN0cyIKIGdk Yl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzBcXS5sb2NhdGlvbiIgIm1h aW4uIiAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIKIGdkYl90ZXN0ICJw eXRob24gcHJpbnQgYmxpc3RcWzFcXSIgIjxnZGIuQnJlYWtwb2ludCBvYmpl Y3QgYXQgJGhleD4iICJDaGVjayBvYmogZXhpc3RzIgotZ2RiX3Rlc3QgInB5 dGhvbiBwcmludCBibGlzdFxbMVxdLmxvY2F0aW9uIiAicHktYnJlYWtwb2lu dFwuYzo0MSoiICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9uIgorCitnZGJf dGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0ubG9jYXRpb24iICJweS1i cmVha3BvaW50XC5jOiR7bXVsdF9saW5lfSoiIFwKKyAgICAgICAgICJDaGVj ayBicmVha3BvaW50IGxvY2F0aW9uIgogCiAjIENoZWNrIGhpdCBhbmQgaWdu b3JlIGNvdW50cy4gCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsx XF0uaGl0X2NvdW50IiAiMSIgIkNoZWNrIGJyZWFrcG9pbnQgaGl0IGNvdW50 IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50LmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktZmluaXNoLWJyZWFrcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi41YjcwOGUzCi0tLSAvZGV2L251bGwKKysrIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMK QEAgLTAsMCArMSw5NyBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9m IEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTEg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlICA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBp bmNyZWFzZV8xIChpbnQgKmEpCit7CisgICphICs9IDE7CisgIHJldHVybiAt NTsKK30KKwordm9pZCBpbmNyZWFzZSAoaW50ICphKQoreworICBpbmNyZWFz ZV8xIChhKTsKK30KKworaW50Cit0ZXN0XzEgKGludCBpLCBpbnQgaikKK3sK KyAgcmV0dXJuIGkgPT0gajsKK30KKworaW50Cit0ZXN0KGludCBpLCBpbnQg aikKK3sKKyAgcmV0dXJuIHRlc3RfMSAoaSwgaik7Cit9CisKK2ludAorY2Fs bF9sb25nam1wXzEgKGptcF9idWYgKmJ1ZikKK3sKKyAgbG9uZ2ptcCAoKmJ1 ZiwgMSk7Cit9CisKK2ludAorY2FsbF9sb25nam1wIChqbXBfYnVmICpidWYp Cit7CisgIGNhbGxfbG9uZ2ptcF8xIChidWYpOworfQorCit2b2lkCit0ZXN0 X2V4ZWNfZXhpdChpbnQgZG9fZXhpdCkKK3sKKyAgaWYgKGRvX2V4aXQpCisg ICAgZXhpdCgwKTsKKyAgZWxzZQorICAgIGV4ZWNsICgiL2Jpbi9lY2hvIiwg ImVjaG8iLCAiLTEiLCAoY2hhciAqKTApOworfQorCitpbnQgbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgam1wX2J1ZiBlbnY7CisgIGlu dCBmb28gPSA1OworICBpbnQgYmFyID0gNDI7CisgIGludCBpLCBqOworCisg IGdldHBpZCgpOworCisgIGkgPSAwOworICAvKiBCcmVhayBhdCBpbmNyZWFz ZS4gKi8KKyAgaW5jcmVhc2UgKCZpKTsKKyAgaW5jcmVhc2UgKCZpKTsKKyAg aW5jcmVhc2UgKCZpKTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykK KyAgICB7CisgICAgICBqICs9IDE7IC8qIENvbmRpdGlvbiBCcmVhay4gKi8K KyAgICB9CisKKyAgaWYgKHNldGptcCAoZW52KSA9PSAwKSAvKiBsb25nam1w IGNhdWdodCAqLworICAgIHsKKyAgICAgIGNhbGxfbG9uZ2ptcCAoJmVudik7 CisgICAgfQorICBlbHNlCisgICAgaiArPSAxOyAvKiBhZnRlciBsb25nam1w LiAqLworCisgIHRlc3RfZXhlY19leGl0KDEpOworCisgIHJldHVybiBqOyAv KiBCcmVhayBhdCBlbmQuICovCit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmV4 cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQzYmVm Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50LmV4cApAQCAtMCwwICsxLDIzMCBAQAor IyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisj IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIG1lY2hh bmlzbQorIyBleHBvc2luZyB2YWx1ZXMgdG8gUHl0aG9uLgorCitpZiAkdHJh Y2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKK30KKwor bG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0IHRlc3RmaWxlICJweS1m aW5pc2gtYnJlYWtwb2ludCIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmMK KworaWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAke3Rlc3RmaWxlfS5leHAg JHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7CisgICAgcmV0dXJuIC0xCit9 CisKK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgW3JlbW90ZV9kb3dubG9hZCBo b3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisKKwor IyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBl bmFibGVkLgoraWYgeyBbc2tpcF9weXRob25fdGVzdHNdIH0geyBjb250aW51 ZSB9CisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIG5vcm1hbCBj b25kaXRpb25zCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKwor aWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVu IHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CitnZGJfdGVzdF9ub19vdXRw dXQgInNldCBjb25maXJtIG9mZiIgImRpc2FibGUgY29uZmlybWF0aW9uIgor Z2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9u IHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhv biBzY3JpcHRzIgorZ2RiX2JyZWFrcG9pbnQgImluY3JlYXNlXzEiCitnZGJf dGVzdCAiY29udGludWUiICJCcmVha3BvaW50IC4qYXQuKiIgImNvbnRpbnVl IHRvIHRoZSBmdW5jdGlvbiB0byBmaW5pc2giCisKKyMgc2V0IEZpbmlzaEJy ZWFrcG9pbnQKKworZ2RiX3Rlc3QgInB5dGhvbiBmaW5pc2hicCA9IE15Rmlu aXNoQnJlYWtwb2ludCAoZ2RiLnBhcnNlX2FuZF9ldmFsICgnYScpLCBnZGIu c2VsZWN0ZWRfZnJhbWUgKCkpIiBcCisgICAgICAgICAiVGVtcG9yYXJ5IGJy ZWFrcG9pbnQuKiIgInNldCBGaW5pc2hCcmVha3BvaW50IgorZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBmaW5pc2hicC5yZXR1cm5fdmFsdWUiICJOb25lLioi IFwKKyAgICAgICAgICJjaGVjayByZXR1cm5fdmFsdWUgYXQgaW5pdCIKKwor IyBjaGVjayBub3JtYWwgYnAgaGl0CisKK2dkYl90ZXN0ICJjb250aW51ZSIg Ik15RmluaXNoQnJlYWtwb2ludCBzdG9wIHdpdGguKiMwLippbmNyZWFzZS4q IiBcCisgICAgICAgICAiY2hlY2sgTXlGaW5pc2hCcmVha3BvaW50IGhpdCIK K2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAucmV0dXJuX3ZhbHVl IiAiLTUuKiIgImNoZWNrIHJldHVybl92YWx1ZSIKKworZ2RiX3Rlc3QgInB5 dGhvbiBwcmludCBmaW5pc2hicC5pc192YWxpZCgpIiAiRmFsc2UuKiJcCisg ICAgICAgICAiZW5zdXJlIHRoYXQgZmluaXNoIGJwIGlzIGludmFsaWQgYWZl ciBub3JtYWwgaGl0IgorCisjIGNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaW4g bWFpbiBubyBhbGxvd2VkCisKK2dkYl90ZXN0ICJmaW5pc2giICJtYWluLioi ICJyZXR1cm4gdG8gbWFpbigpIgorZ2RiX3Rlc3QgInB5dGhvbiBNeUZpbmlz aEJyZWFrcG9pbnQgKE5vbmUsIGdkYi5zZWxlY3RlZF9mcmFtZSAoKSkiIFwK KyAgICAgICAgICJWYWx1ZUVycm9yOiBcIkZpbmlzaEJyZWFrcG9pbnRcIiBu b3QgbWVhbmluZ2Z1bCBpbiB0aGUgb3V0ZXJtb3N0IGZyYW1lLi4qIiBcCisg ICAgICAgICAiY2hlY2sgRmluaXNoQlAgbm90IGFsbG93ZWQgaW4gbWFpbiIK KworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2l0aCBubyBkZWJ1ZyBz eW1ib2wgCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2Ri X3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNj cmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBz Y3JpcHRzIgorc2V0IGNvbmRfbGluZSBbZ2RiX2dldF9saW5lX251bWJlciAi Q29uZGl0aW9uIEJyZWFrLiJdCisKK2lmICFbcnVudG8gImdldHBpZCJdIHRo ZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gZ2V0cGlkLiIKKyAgICBy ZXR1cm4gMAorfQorCitnZGJfdGVzdCAicHl0aG9uIGZpbmlzaEJQID0gU2lt cGxlRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiBcCisg ICAgICAgICAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBpbml0IiBcCisgICAg ICAgICAic2V0IGZpbmlzaCBicmVha3BvaW50IgorZ2RiX3Rlc3QgImNvbnRp bnVlIiAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBzdG9wLioiICJjaGVjayBG aW5pc2hCcmVha3BvaW50IGhpdCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQg ZmluaXNoQlAucmV0dXJuX3ZhbHVlIiAiTm9uZSIgImNoZWNrIHJldHVybiB2 YWx1ZSB3aXRob3V0IGRlYnVnIHN5bWJvbCIKKworIworIyBUZXN0IEZpbmlz aEJyZWFrcG9pbnQgaW4gZnVuY3Rpb24gcmV0dXJuZWQgYnkgbG9uZ2ptcCAK KyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAi c291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGlt cG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMi CisKK2lmICFbcnVudG8gY2FsbF9sb25nam1wXzFdIHRoZW4geworICAgIHBl cnJvciAiY291bGRuJ3QgcnVuIHRvIGJyZWFrcG9pbnQgY2FsbF9sb25nam1w IgorICAgIGNvbnRpbnVlCit9CisKK2dkYl90ZXN0ICJweXRob24gZmluaXNo YnAgPSBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUo KSkiIFwKKyAgICAgICAgICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQi IFwKKyAgICAgICAgICJzZXQgZmluaXNoIGJyZWFrcG9pbnQiIAorZ2RiX3Rl c3QgImJyZWFrIFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJhZnRlciBsb25nam1w LiJdIiAiQnJlYWtwb2ludC4qIGF0IC4qIiBcCisgICAgICAgICAic2V0IEJQ IGFmdGVyIHRoZSBqdW1wIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxl RmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgXAorICAgICAgICAg ImNoZWNrIEZpbmlzaEJQIG91dCBvZiBzY29wZSBub3RpZmljYXRpb24iCitn ZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJwLmlzX3ZhbGlkKCkiICJG YWxzZS4qIlwKKyAgICAgICAgICJlbnN1cmUgdGhhdCBmaW5pc2ggYnAgaXMg aW52YWxpZCBhZmVyIG91dCBvZiBzY29wZSBub3RpZmljYXRpb24iCisKKyMK KyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIEJQIGNvbmRpdGlvbiBldmFs dWF0aW9uIAorIyAoZmluaXNoIGluIGR1bW15IGZyYW1lKQorIworCitjbGVh bl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJl bW90ZV9weXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIg XAorICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworCitpZiAh W3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8g bWFpbi4iCisgICAgcmV0dXJuIDAKK30KKyAgICAgICAgIAorZ2RiX3Rlc3Qg ImJyZWFrICR7Y29uZF9saW5lfSBpZiB0ZXN0XzEoaSw4KSIgIkJyZWFrcG9p bnQgLiogYXQgLioiIFwKKyAgICAgICAgICJzZXQgYSBjb25kaXRpb25hbCBC UCIKK2dkYl90ZXN0ICJweXRob24gVGVzdEJyZWFrcG9pbnQoKSIgIlRlc3RC cmVha3BvaW50IGluaXQiIFwKKyAgICAgICAgICJzZXQgRmluaXNoQlAgaW4g YSBicmVha3BvaW50IGNvbmRpdGlvbiIKK2dkYl90ZXN0ICJjb250aW51ZSIg XAorICAgICAgICAgIlwiRmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBz ZXQgb24gYSBkdW1teSBmcmFtZS4qIiBcCisgICAgICAgICAiZG9uJ3QgYWxs b3cgRmluaXNoQnJlYWtwb2ludCBvbiBkdW1teSBmcmFtZXMiCitnZGJfdGVz dCAicHJpbnQgaSIgIjgiICJjaGVjayBzdG9wcGVkIGxvY2F0aW9uIgorCisj CisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBCUCBjb25kaXRpb24gZXZh bHVhdGlvbiAKKyMgKGZpbmlzaCBpbiBub3JtYWwgZnJhbWUpCisjCisKK2Ns ZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAk cmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4q IiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitpZiAh W3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8g bWFpbi4iCisgICAgcmV0dXJuIDAKK30KKworZ2RiX3Rlc3QgImJyZWFrICR7 Y29uZF9saW5lfSBpZiB0ZXN0KGksOCkiIFwKKyAgICAgICAgICJCcmVha3Bv aW50IC4qIGF0IC4qIiAic2V0IGNvbmRpdGlvbmFsIEJQIgorZ2RiX3Rlc3Qg InB5dGhvbiBUZXN0QnJlYWtwb2ludCgpIiAiVGVzdEJyZWFrcG9pbnQgaW5p dCIgInNldCBCUCBpbiBjb25kaXRpb24iCisKK2dkYl90ZXN0ICJjb250aW51 ZSIgXAorICAgICAgICAgInRlc3QgZG9uJ3Qgc3RvcCAxLip0ZXN0IGRvbid0 IHN0b3AgMi4qdGVzdCBzdG9wLipFcnJvciBpbiB0ZXN0aW5nIGJyZWFrcG9p bnQgY29uZGl0aW9uLipUaGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBzdG9w cGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLioiIFwK KyAgICAgICAgICJzdG9wIGluIGNvbmRpdGlvbiBmdW5jdGlvbiIKKworZ2Ri X3Rlc3QgImNvbnRpbnVlIiAiQ29udGludWluZy4qIiAiZmluaXNoIGNvbmRp dGlvbiBldmFsdWF0aW9uIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiQnJlYWtw b2ludC4qIiAic3RvcCBhdCBjb25kaXRpb25hbCBicmVha3BvaW50IgorZ2Ri X3Rlc3QgInByaW50IGkiICI4IiAiY2hlY2sgc3RvcHBlZCBsb2NhdGlvbiIK KworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gZXhwbGljaXQgaW5m ZXJpb3IgZnVuY3Rpb24gY2FsbAorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVz dGZpbGV9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmls ZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImlt cG9ydCBweXRob24gc2NyaXB0cyIKKworaWYgIVtydW50b19tYWluXSB0aGVu IHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVy biAwCit9CisKKyMgcmV0dXJuIGFkZHJlc3MgaW4gZHVtbXkgZnJhbWUKKwor Z2RiX3Rlc3QgInB5dGhvbiBUZXN0RXhwbGljaXRCcmVha3BvaW50KCdpbmNy ZWFzZV8xJykiICJCcmVha3BvaW50LiphdC4qIiBcCisgICAgICAgICAicHJl cGFyZSBUZXN0RXhwbGljaXRCcmVha3BvaW50IgorZ2RiX3Rlc3QgInByaW50 IGluY3JlYXNlXzEoJmkpIiBcCisgICAgICAgICAiXCJGaW5pc2hCcmVha3Bv aW50XCIgY2Fubm90IGJlIHNldCBvbiBhIGR1bW15IGZyYW1lLioiIFwKKyAg ICAgICAgICJkb24ndCBhbGxvdyBGaW5pc2hCcmVha3BvaW50IG9uIGR1bW15 IGZyYW1lcyIKKworIyByZXR1cm4gYWRkcmVzcyBpbiBub3JtYWwgZnJhbWUK KworZGVsZXRlX2JyZWFrcG9pbnRzCitnZGJfdGVzdCAicHl0aG9uIFRlc3RF eHBsaWNpdEJyZWFrcG9pbnQoXCJpbmNyZWFzZV8xXCIpIiAiQnJlYWtwb2lu dC4qYXQuKiIgXAorICAgICAgICAgInByZXBhcmUgVGVzdEV4cGxpY2l0QnJl YWtwb2ludCIKK2dkYl90ZXN0ICJwcmludCBpbmNyZWFzZSgmaSkiIFwKKyAg ICAgICAgICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQuKlNpbXBsZUZp bmlzaEJyZWFrcG9pbnQgc3RvcC4qVGhlIHByb2dyYW0gYmVpbmcgZGVidWdn ZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdE Qi4qIiBcCisgICAgICAgICAiRmluaXNoQlAgc3RvcCBhdCBkdXJpbmcgZXhw bGljaXQgZnVuY3Rpb24gY2FsbCIKKworCisjCisjIFRlc3QgRmluaXNoQnJl YWtwb2ludCB3aGVuIGluZmVyaW9yIGV4aXRzCisjCisKK2lmICFbcnVudG8g InRlc3RfZXhlY19leGl0Il0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1 biB0byB0ZXN0X2V4ZWNfZXhpdC4iCisgICAgcmV0dXJuIDAKK30KKworZ2Ri X3Rlc3QgInB5dGhvbiBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdl c3RfZnJhbWUoKSkiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQiICJz ZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4aXQoKSIKK2dkYl90ZXN0ICJjb250 aW51ZSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLioi ICJjYXRjaCBvdXQgb2Ygc2NvcGUgYWZ0ZXIgZXhpdCIKKworIworIyBUZXN0 IEZpbmlzaEJyZWFrcG9pbnQgd2hlbiBpbmZlcmlvciBleGVjcworIworCitp ZiAhW3J1bnRvICJ0ZXN0X2V4ZWNfZXhpdCJdIHRoZW4geworICAgIGZhaWwg IkNhbm5vdCBydW4gdG8gdGVzdF9leGVjX2V4aXQuIgorICAgIHJldHVybiAw Cit9ICAgICAKKworZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgdmFyIGRvX2V4 aXQgPSAwIiAic3dpdGNoIHRvIGV4ZWN2ZSgpIHRlc3QiCitnZGJfdGVzdCAi cHl0aG9uIFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFt ZSgpKSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIgInNldCBGaW5p c2hCUCBhZnRlciB0aGUgZXhlYyIKK2dkYl90ZXN0ICJjYXRjaCBleGVjIiAi Q2F0Y2hwb2ludC4qXChleGVjXCkuKiIgImNhdGNoIGV4ZWMiCitnZGJfdGVz dCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91dCBvZiBz Y29wZS4qIiAiY2F0Y2ggb3V0IG9mIHNjb3BlIGFmdGVyIGV4ZWMiClwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5IGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZjEwYjAK LS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktZmluaXNoLWJyZWFrcG9pbnQucHkKQEAgLTAsMCArMSw4OCBAQAorIyBD b3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQg b2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBweXRob24gRmluaXNo CisjIEJyZWFrcG9pbnRzLgorCQkKK2NsYXNzIE15RmluaXNoQnJlYWtwb2lu dChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisJZGVmIF9faW5pdF9fKHNlbGYs IHZhbCwgZnJhbWUpOgorCQlnZGIuRmluaXNoQnJlYWtwb2ludC5fX2luaXRf XyAoc2VsZiwgZnJhbWUpCisJCXByaW50ICJNeUZpbmlzaEJyZWFrcG9pbnQg aW5pdCIKKwkJc2VsZi52YWwgPSB2YWwKKwkJCisJZGVmIHN0b3Aoc2VsZik6 CisJCXByaW50ICJNeUZpbmlzaEJyZWFrcG9pbnQgc3RvcCB3aXRoICVkIiAl IGludChzZWxmLnZhbC5kZXJlZmVyZW5jZSgpKQorCQlnZGIuZXhlY3V0ZSgi d2hlcmUgMSIpCisJCXJldHVybiBUcnVlCisJCisJZGVmIG91dF9vZl9zY29w ZShzZWxmKToKKwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2ludCBvdXQgb2Yg c2NvcGUuLi4iCisKK2NsYXNzIFRlc3RCcmVha3BvaW50KGdkYi5CcmVha3Bv aW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5C cmVha3BvaW50Ll9faW5pdF9fKHNlbGYsIHNwZWM9InRlc3RfMSIsIGludGVy bmFsPTEpCisgICAgICAgIHNlbGYuc2lsZW50ID0gVHJ1ZQorICAgICAgICBz ZWxmLmNvdW50ID0gMAorICAgICAgICBwcmludCAiVGVzdEJyZWFrcG9pbnQg aW5pdCIKKyAgICAgICAgCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgCXNl bGYuY291bnQgKz0gMQorICAgIAl0cnk6CisgICAgICAgIAlUZXN0RmluaXNo QnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCksIHNlbGYuY291bnQpCisg ICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgIAlwcmlu dCBlCisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBUZXN0RmluaXNo QnJlYWtwb2ludChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisgICAgZGVmIF9f aW5pdF9fKHNlbGYsIGZyYW1lLCBjb3VudCk6CisgICAgCXNlbGYuY291bnQg PSBjb3VudAorICAgICAgICBnZGIuRmluaXNoQnJlYWtwb2ludC5fX2luaXRf XyhzZWxmLCBmcmFtZSwgaW50ZXJuYWw9MSkKKyAgICAgICAgCisgICAgICAg IAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwcmludCAiLS0+Iiwg c2VsZi5udW1iZXIKKyAgICAgICAgaWYgKHNlbGYuY291bnQgPT0gMyk6Cisg ICAgICAgICAgICBwcmludCAidGVzdCBzdG9wIC4uLiAlZCIgJSBzZWxmLmNv dW50CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgor ICAgICAgICAgICAgcHJpbnQgInRlc3QgZG9uJ3Qgc3RvcCAlZCIgJSBzZWxm LmNvdW50CisgICAgICAgICAgICByZXR1cm4gRmFsc2UgCisgICAgICAgIAor ICAgIAorICAgIGRlZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisgICAgICAgIHBy aW50ICJ0ZXN0IGRpZG4ndCBmaW5pc2ggLi4uICVkIiAlIHNlbGYuY291bnQK KworY2xhc3MgVGVzdEV4cGxpY2l0QnJlYWtwb2ludChnZGIuQnJlYWtwb2lu dCk6CisJZGVmIHN0b3Aoc2VsZik6CisJCXRyeToKKwkJCVNpbXBsZUZpbmlz aEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKQorCQlleGNlcHQgVmFs dWVFcnJvciBhcyBlOgorCQkJcHJpbnQgZQorCQlyZXR1cm4gRmFsc2UKKwor Y2xhc3MgU2ltcGxlRmluaXNoQnJlYWtwb2ludChnZGIuRmluaXNoQnJlYWtw b2ludCk6CisJZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKwkJZ2RiLkZp bmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1lKQorCQkKKwkJ cHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIKKwkJCisJZGVm IHN0b3Aoc2VsZik6CisJCXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50 IHN0b3AiIAorCQlyZXR1cm4gVHJ1ZQorCQorCWRlZiBvdXRfb2Zfc2NvcGUo c2VsZik6CisJCXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91dCBv ZiBzY29wZS4uLiIKKworcHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWRk IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50Mi5jYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYTBlZWEwNgotLS0gL2Rldi9udWxsCisrKyBi L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2lu dDIuY2MKQEAgLTAsMCArMSw1OSBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBw YXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0 IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlICA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisKKyNpbmNsdWRlIDxpb3N0cmVh bT4KKwordm9pZAordGhyb3dfZXhjZXB0aW9uXzEgKGludCBlKQoreworICB0 aHJvdyBuZXcgaW50IChlKTsKK30KKwordm9pZAordGhyb3dfZXhjZXB0aW9u IChpbnQgZSkKK3sKKyAgdGhyb3dfZXhjZXB0aW9uXzEgKGUpOworfQorCitp bnQKK21haW4gKHZvaWQpCit7CisgIGludCBpOworICB0cnkKKyAgICB7Cisg ICAgICB0aHJvd19leGNlcHRpb25fMSAoMTApOworICAgIH0KKyAgY2F0Y2gg KGNvbnN0IGludCAqZSkKKyAgICB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAi RXhjZXB0aW9uICMiIDw8ICplIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgIGkg Kz0gMTsgLyogQnJlYWsgYWZ0ZXIgZXhjZXB0aW9uIDEuICAqLworCisgIHRy eQorICAgIHsKKyAgICAgIHRocm93X2V4Y2VwdGlvbiAoMTApOworICAgIH0K KyAgY2F0Y2ggKGNvbnN0IGludCAqZSkKKyAgICB7CisgICAgICAgIHN0ZDo6 Y2VyciA8PCAiRXhjZXB0aW9uICMiIDw8ICplIDw8IHN0ZDo6ZW5kbDsKKyAg ICB9CisgIGkgKz0gMTsgLyogQnJlYWsgYWZ0ZXIgZXhjZXB0aW9uIDIuICAq LworCisgIHJldHVybiBpOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAgYi9nZGIv dGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4 cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU3OThj Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAKQEAgLTAsMCArMSw2NSBAQAor IyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisj IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIG1lY2hh bmlzbQorIyBleHBvc2luZyB2YWx1ZXMgdG8gUHl0aG9uLgorCitpZiAkdHJh Y2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKK30KKwor bG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0IHRlc3RmaWxlICJweS1m aW5pc2gtYnJlYWtwb2ludDIiCitzZXQgc3JjZmlsZSAke3Rlc3RmaWxlfS5j Yworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxl fQorc2V0IHB5ZmlsZSAgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxl fS5weQorCisjIFN0YXJ0IHdpdGggYSBmcmVzaCBnZGIuCitnZGJfZXhpdAor Z2RiX3N0YXJ0CitnZGJfcmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRzdWJk aXIKK2dkYl9sb2FkICR7YmluZmlsZX0KKworaWYgeyBbZ2RiX2NvbXBpbGUg IiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7YmluZmlsZX0i IGV4ZWN1dGFibGUge2RlYnVnIGMrK31dICE9ICIiIH0geworICAgIHVudGVz dGVkICJDb3VsZG4ndCBjb21waWxlICR7c3JjZmlsZX0iCisgICAgcmV0dXJu IC0xCit9CisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAi Q2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCisjCisj IENoZWNrIEZpbmlzaEJyZWFrcG9pbnRzIGFnYWluc3QgQysrIGV4Y2VwdGlv bnMKKyMKKworZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIg IkJyZWFrIGFmdGVyIGV4Y2VwdGlvbiAyIl0KKworZ2RiX3Rlc3QgInNvdXJj ZSAkcHlmaWxlIiAiLipQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAg ICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisgICAgICAgICAKK2dk Yl9icmVha3BvaW50ICJ0aHJvd19leGNlcHRpb25fMSIKK2dkYl90ZXN0ICJj b250aW51ZSIgIkJyZWFrcG9pbnQgLip0aHJvd19leGNlcHRpb25fMS4qIiAi cnVuIHRvIGV4Y2VwdGlvbiAxIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50 IGxlbihnZGIuYnJlYWtwb2ludHMoKSkiICIzIiAiY2hlY2sgQlAgY291bnQi CitnZGJfdGVzdCAicHl0aG9uIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQo Z2RiLm5ld2VzdF9mcmFtZSgpKSIgImluaXQgRXhjZXB0aW9uRmluaXNoQnJl YWtwb2ludCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhjZXB0aW9uIgor Z2RiX3Rlc3QgImNvbnRpbnVlIiAiLipzdG9wcGVkIGF0IEV4Y2VwdGlvbkZp bmlzaEJyZWFrcG9pbnQuKiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaW4g Y2F0Y2goKSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGdkYi5icmVh a3BvaW50cygpKSIgIjMiICJjaGVjayBmaW5pc2ggQlAgcmVtb3ZhbCIKKwor Z2RiX3Rlc3QgImNvbnRpbnVlIiAiLipCcmVha3BvaW50LiogdGhyb3dfZXhj ZXB0aW9uXzEuKiIgImNvbnRpbnVlIHRvIHNlY29uZCBleGNlcHRpb24iCitn ZGJfdGVzdCAicHl0aG9uIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQoZ2Ri Lm5ld2VzdF9mcmFtZSgpKSIgImluaXQgRXhjZXB0aW9uRmluaXNoQnJlYWtw b2ludCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhjZXB0aW9uIgorZ2Ri X3Rlc3QgImNvbnRpbnVlIiAiLipleGNlcHRpb24gZGlkIG5vdCBmaW5pc2gu KiIgIkZpbmlzaEJyZWFrcG9pbnQgd2l0aCBleGNlcHRpb24gdGhyb3duIG5v dCBjYXVnaHQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5IGIvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5weQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE0Y2YxCi0tLSAvZGV2L251 bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1i cmVha3BvaW50Mi5weQpAQCAtMCwwICsxLDM0IEBACisjIENvcHlyaWdodCAo QykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor IyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RC IHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHB5dGhvbiBGaW5pc2gKKyMgQnJlYWtw b2ludHMuCisKK2NsYXNzIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQoZ2Ri LkZpbmlzaEJyZWFrcG9pbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBm cmFtZSk6CisgICAgICAgIGdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9f KHNlbGYsIGZyYW1lLCBpbnRlcm5hbD0xKQorICAgICAgICBzZWxmLnNpbGVu dCA9IFRydWU7CisgICAgICAgIHByaW50ICJpbml0IEV4Y2VwdGlvbkZpbmlz aEJyZWFrcG9pbnQiCisgICAgICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgor ICAgICAgICBwcmludCAic3RvcHBlZCBhdCBFeGNlcHRpb25GaW5pc2hCcmVh a3BvaW50IgorICAgICAgICBnZGIucG9zdF9ldmVudChzZWxmLmRlbGV0ZSkK KyAgICAgICAgcmV0dXJuIFRydWUgCisgICAgCisgICAgZGVmIG91dF9vZl9z Y29wZShzZWxmKToKKyAgICAgICAgcHJpbnQgImV4Y2VwdGlvbiBkaWQgbm90 IGZpbmlzaCAuLi4iCisKKworcHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1wb3J0 ZWQiCi0tIAoxLjcuNi40Cgo= --90e6ba4fc2dcce038504b01b5cb7--