From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16506 invoked by alias); 24 Oct 2011 09:15:29 -0000 Received: (qmail 16449 invoked by uid 22791); 24 Oct 2011 09:15:22 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,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; Mon, 24 Oct 2011 09:15:03 +0000 Received: by vcbfk1 with SMTP id fk1so6037377vcb.0 for ; Mon, 24 Oct 2011 02:15:02 -0700 (PDT) Received: by 10.220.108.84 with SMTP id e20mr1658603vcp.3.1319447702146; Mon, 24 Oct 2011 02:15:02 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.180.75 with HTTP; Mon, 24 Oct 2011 02:14:42 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Mon, 24 Oct 2011 11:43:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=f46d043c808c9615a604b007db00 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/msg00620.txt.bz2 --f46d043c808c9615a604b007db00 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 5597 On Fri, Oct 21, 2011 at 9:45 AM, Kevin Pouget wrot= e: > On Thu, Oct 20, 2011 at 10:41 PM, Tom Tromey wrote: >>>>>>> "Kevin" =3D=3D Kevin Pouget writes: >> >> Tom> You need to store a gdb.Type wrapper. >> Tom> A 'struct type' can also be invalidated when an objfile is destroye= d. >> >> Kevin> I wouldn't mind, but I can't see how gdb.Type ensures validity, a= s far >> Kevin> as I've seen, there is no "is_valid" method and I can't and no fu= rther >> Kevin> verification during the Python -> C translation: >> >> When an objfile is destroyed, py-type.c:save_objfile_types is called. >> This makes a copy of the struct type underlying any relevant Type object. > > I'll take a look at that, I don't remember what was the problem! I understood that, and replaced 'struct type *' fields by the corresponding 'PyObject/Type' python objects >> [ out_of_scope_notif ] >> Kevin> - avoid calling `out_of_scope' every normal_stop when the breakpo= int >> Kevin> is not anymore in the callstack >> >> It seems to me that manually managing this is not the best we could do. >> >> I was re-reading the code and I realized that this isn't actually >> working the way I had remembered it working: >> >> +A @fdb{finish breakpoint} is a breakpoint set at the return address of >> +a frame, based on the "finish command. @code{gdb.FinishBreakpoint} exte= nds >> +@code{gdb.Breakpoint} >> >> This approach is fine; but once a frame is gone, it is gone -- we should >> just destroy the breakpoint at that point. =A0Maybe this would make the >> internal logic simpler as well. > > yes, I think you're right with that, "once a frame is gone, it is > gone", I actually don't use myself this 'permanent finish breakpoint' > feature, so I'll change it. > So basically, the BP must be deleted right after it has been it (maybe > through the 'temporary' mechanism). 'out_of_scope' will be triggered > in the same conditions as before, but instead of playing with > 'out_of_scope_notif' I'll delete the GDB breakpoint (thus invalidating > the Python BP) > > I'll post a patch going this way later today So I've changed the way FinishBreakpoints are 'garbage collected'. Now, they're more similar to Temporary Breakpoints, that is, they're deleted *soon* after they've been hit. Soon, because when Breakpoint.stop tells GDB *not* to stop at the [finish] breakpoint, there is no way to delete this breakpoint (and I guess that may be the reason why Temporary Breakpoints are not available in Python yet). So I disable it, and "b->disposition =3D=3D disp_del" will ensure that the BP will be removed when it's possible. The `out_of_scope' callback will also delete the breakpoint. I've updated the doc and testsuite accordingly, and as far as I've seen, there is no regression on X86_64/Fedora (I need still need to improve my test environment) Thanks, Kevin 2011-10-24 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. * breakpoint.h (struct breakpoint): New field: is_py_finish_bp. * breakpoint.c (init_raw_breakpoint_without_location): Initialize is_py_finish_bp. * 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. * 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. (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. (frame_object_to_frame_info): New prototype. (gdbpy_initialize_finishbreakpoints): New prototype. (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. 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. --f46d043c808c9615a604b007db00 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_gu57eobf0 Content-length: 72619 RnJvbSBjYjM0OTdhYjhiMDA5OGQyM2E5ZWMyMjk5ZmYwYzNlYWFiZmYxNGY5 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJbnRyb2R1Y2UgZ2Ri LkZpbmlzaEJyZWFrcG9pbnRzCgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv YnJlYWtwb2ludC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogZ2RiL2JyZWFrcG9pbnQuaCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAzICsKIGdkYi9kb2MvZ2RiLnRleGlu Zm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NiArKysK IGdkYi9pbmZjbWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAyMSArLQogZ2RiL2luZmVyaW9yLmggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKIGdkYi9pbmZydW4u YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg OSArLQogZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDUwICstLQogZ2RiL3B5dGhvbi9weS1maW5pc2hi cmVha3BvaW50LmMgICAgICAgICAgICAgICAgICAgfCAgMzkyICsrKysrKysr KysrKysrKysrKysrCiBnZGIvcHl0aG9uL3B5LWZyYW1lLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMzIgKy0KIGdkYi9weXRob24vcHl0 aG9uLWludGVybmFsLmggICAgICAgICAgICAgICAgICAgICAgIHwgICA0NiAr KystCiBnZGIvcHl0aG9uL3B5dGhvbi5jICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDYgKwogZ2RiL3B5dGhvbi9weXRob24uaCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGdkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cCAgICAgICAgIHwg ICAgNyArLQogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1i cmVha3BvaW50LmMgICAgfCAgIDk3ICsrKysrCiBnZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwICB8ICAyMzAgKysr KysrKysrKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQucHkgICB8ICAgODggKysrKysKIGdkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MgIHwgICA1OSAr KysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtw b2ludDIuZXhwIHwgICA2NSArKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5ICB8ICAgMzQgKysKIDIwIGZp bGVzIGNoYW5nZWQsIDExMzIgaW5zZXJ0aW9ucygrKSwgNjUgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3B5dGhvbi9weS1maW5pc2hi cmVha3BvaW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludC5leHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQucHkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQyLmNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktZmluaXNoLWJyZWFrcG9pbnQyLnB5CgpkaWZmIC0tZ2l0IGEvZ2RiL01h a2VmaWxlLmluIGIvZ2RiL01ha2VmaWxlLmluCmluZGV4IDMyZDhlZjMuLjZj ZWRmMTIgMTAwNjQ0Ci0tLSBhL2dkYi9NYWtlZmlsZS5pbgorKysgYi9nZGIv TWFrZWZpbGUuaW4KQEAgLTI4Nyw2ICsyODcsNyBAQCBTVUJESVJfUFlUSE9O X09CUyA9IFwKIAlweS1ldnRyZWdpc3RyeS5vIFwKIAlweS1ldnRzLm8gXAog CXB5LWV4aXRlZGV2ZW50Lm8gXAorCXB5LWZpbmlzaGJyZWFrcG9pbnQubyBc CiAJcHktZnJhbWUubyBcCiAJcHktZnVuY3Rpb24ubyBcCiAJcHktaW5mZXJp b3IubyBcCkBAIC0zMTgsNiArMzE5LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNT ID0gXAogCXB5dGhvbi9weS1ldnRyZWdpc3RyeS5jIFwKIAlweXRob24vcHkt ZXZ0cy5jIFwKIAlweXRob24vcHktZXhpdGVkZXZlbnQuYyBcCisJcHl0aG9u L3B5LWZpbmlzaGJyZWFrcG9pbnQuYyBcCiAJcHl0aG9uL3B5LWZyYW1lLmMg XAogCXB5dGhvbi9weS1mdW5jdGlvbi5jIFwKIAlweXRob24vcHktaW5mZXJp b3IuYyBcCkBAIC0yMTAzLDYgKzIxMDUsMTAgQEAgcHktZXhpdGVkZXZlbnQu bzogJChzcmNkaXIpL3B5dGhvbi9weS1leGl0ZWRldmVudC5jCiAJJChDT01Q SUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZXhp dGVkZXZlbnQuYwogCSQoUE9TVENPTVBJTEUpCiAKK3B5LWZpbmlzaGJyZWFr cG9pbnQubzogJChzcmNkaXIpL3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50 LmMKKwkkKENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5 dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMKKwkkKFBPU1RDT01QSUxFKQor CiBweS1mcmFtZS5vOiAkKHNyY2RpcikvcHl0aG9uL3B5LWZyYW1lLmMKIAkk KENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9w eS1mcmFtZS5jCiAJJChQT1NUQ09NUElMRSkKZGlmZiAtLWdpdCBhL2dkYi9i cmVha3BvaW50LmMgYi9nZGIvYnJlYWtwb2ludC5jCmluZGV4IGJhMWIwOGYu LmZmZDJlZjYgMTAwNjQ0Ci0tLSBhL2dkYi9icmVha3BvaW50LmMKKysrIGIv Z2RiL2JyZWFrcG9pbnQuYwpAQCAtNTcwMCw2ICs1NzAwLDcgQEAgaW5pdF9y YXdfYnJlYWtwb2ludF93aXRob3V0X2xvY2F0aW9uIChzdHJ1Y3QgYnJlYWtw b2ludCAqYiwKICAgYi0+ZnJhbWVfaWQgPSBudWxsX2ZyYW1lX2lkOwogICBi LT5jb25kaXRpb25fbm90X3BhcnNlZCA9IDA7CiAgIGItPnB5X2JwX29iamVj dCA9IE5VTEw7CisgIGItPmlzX3B5X2ZpbmlzaF9icCA9IDA7CiAgIGItPnJl bGF0ZWRfYnJlYWtwb2ludCA9IGI7CiB9CiAKZGlmZiAtLWdpdCBhL2dkYi9i cmVha3BvaW50LmggYi9nZGIvYnJlYWtwb2ludC5oCmluZGV4IGMyMTE2ZTIu LjNmMjMyZTcgMTAwNjQ0Ci0tLSBhL2dkYi9icmVha3BvaW50LmgKKysrIGIv Z2RiL2JyZWFrcG9pbnQuaApAQCAtNjI1LDYgKzYyNSw5IEBAIHN0cnVjdCBi cmVha3BvaW50CiAgICAgICAgY2FuIHNvbWV0aW1lcyBiZSBOVUxMIGZvciBl bmFibGVkIEdEQnMgYXMgbm90IGFsbCBicmVha3BvaW50CiAgICAgICAgdHlw ZXMgYXJlIHRyYWNrZWQgYnkgdGhlIFB5dGhvbiBzY3JpcHRpbmcgQVBJLiAg Ki8KICAgICBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKnB5X2JwX29iamVj dDsKKworICAgIC8qIFRSVUUgaXMgcHlfYnBfb2JqZWN0IGlzIGEgZ2RiLkZp bmlzaEJyZWFrcG9pbnQgb2JqZWN0IC4gICovCisgICAgaW50IGlzX3B5X2Zp bmlzaF9icDsKICAgfTsKIAogLyogQW4gaW5zdGFuY2Ugb2YgdGhpcyB0eXBl IGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgd2F0Y2hwb2ludC4gIEl0CmRpZmYg LS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIudGV4 aW5mbwppbmRleCA2OWUyYmRhLi4xMGZmMWM2IDEwMDY0NAotLS0gYS9nZGIv ZG9jL2dkYi50ZXhpbmZvCisrKyBiL2dkYi9kb2MvZ2RiLnRleGluZm8KQEAg LTI0MDgyLDYgKzI0MDgyLDUyIEBAIGNvbW1hbmRzLCBzZXBhcmF0ZWQgYnkg bmV3bGluZXMuICBJZiB0aGVyZSBhcmUgbm8gY29tbWFuZHMsIHRoaXMKIGF0 dHJpYnV0ZSBpcyBAY29kZXtOb25lfS4gIFRoaXMgYXR0cmlidXRlIGlzIG5v dCB3cml0YWJsZS4KIEBlbmQgZGVmdmFyCiAKK0BzdWJzdWJzZWN0aW9uIEZp bmlzaCBCcmVha3BvaW50cworCitAY2luZGV4IHB5dGhvbiBmaW5pc2ggYnJl YWtwb2ludHMKK0B0aW5kZXggZ2RiLkZpbmlzaEJyZWFrcG9pbnQKKworQSBm aW5pc2ggYnJlYWtwb2ludCBpcyBhIHRlbXBvcmFyeSBicmVha3BvaW50IHNl dCBhdCB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YKK2EgZnJhbWUsIGJhc2VkIG9u IHRoZSBAY29kZXtmaW5pc2h9IGNvbW1hbmQuICBAY29kZXtnZGIuRmluaXNo QnJlYWtwb2ludH0KK2V4dGVuZHMgQGNvZGV7Z2RiLkJyZWFrcG9pbnR9LiBU aGUgdW5kZXJseWluZyBicmVha3BvaW50IHdpbGwgYmUgZGlzYWJsZWQgCith bmQgZGVsZXRlZCB3aGVuIHRoZSBleGVjdXRpb24gd2lsbCBydW4gb3V0IG9m IHRoZSBicmVha29pbnQgc2NvcGUgKGkuZS5AOiAKK0Bjb2Rle0JyZWFrcG9p bnQuc3RvcH0gb3IgQGNvZGV7RmluaXNoQnJlYWtwb2ludC5vdXRfb2Zfc2Nv cGV9IHRyaWdnZXJlZCkuCisKK0BkZWZ1biBGaW5pc2hCcmVha3BvaW50Ll9f aW5pdF9fIChAdmFye2ZyYW1lfSwgQHJ7W31AdmFye2ludGVybmFsfUBye119 KQorQ3JlYXRlIGEgZmluaXNoIGJyZWFrcG9pbnQgYXQgdGhlIHJldHVybiBh ZGRyZXNzIG9mIHRoZSBAY29kZXtnZGIuRnJhbWV9CitvYmplY3QgQHZhcntm cmFtZX0uICBUaGUgb3B0aW9uYWwgQHZhcntpbnRlcm5hbH0gYXJndW1lbnQg YWxsb3dzIHRoZQorYnJlYWtwb2ludCB0byBiZWNvbWUgaW52aXNpYmxlIHRv IHRoZSB1c2VyLiAgQHhyZWZ7QnJlYWtwb2ludHMgSW4gUHl0aG9ufQorZm9y IGZ1cnRoZXIgZGV0YWlscyBhYm91dCB0aGlzIGFyZ3VtZW50LgorQGVuZCBk ZWZ1bgorCitAZGVmdW4gRmluaXNoQnJlYWtwb2ludC5vdXRfb2Zfc2NvcGUg KHNlbGYpCitJbiBzb21lIGNpcmNvbnN0YW5jZXMgKGUuZy5AOiBAY29kZXts b25nam1wfSwgQysrIGV4Y2VwdGlvbnMsIEB2YWx1ZXtHREJOfSAKK0Bjb2Rl e3JldHVybn0gY29tbWFuZCwgLi4uKSwgYSBmdW5jdGlvbiBtYXkgbm90IHBy b3Blcmx5IHRlcm1pbmF0ZSwgYW5kIHRodXMgCituZXZlciBoaXQgdGhlIGZp bmlzaCBicmVha3BvaW50LiAgV2hlbiBAdmFsdWV7R0RCTn0gbm90aWNlcyBz dWNoIGEgCitzaXR1YXRpb24sIHRoZSBAY29kZXtvdXRfb2Zfc2NvcGV9IGNh bGxiYWNrIHdpbGwgYmUgdHJpZ2dlcmVkLgorCitZb3UgbWF5IHdhbnQgdG8g c3ViLWNsYXNzIEBjb2Rle2dkYi5GaW5pc2hCcmVha3BvaW50fSBhbmQgb3Zl cnJpZGUgdGhpcworbWV0aG9kOgorCitAc21hbGxleGFtcGxlCitjbGFzcyBN eUZpbmlzaEJyZWFrcG9pbnQgKGdkYi5GaW5pc2hCcmVha3BvaW50KQorICAg IGRlZiBzdG9wIChzZWxmKToKKyAgICAgICAgcHJpbnQgIm5vcm1hbCBmaW5p c2giCisgICAgICAgIHJldHVybiBUcnVlCisgICAgCisgICAgZGVmIG91dF9v Zl9zY29wZSAoKToKKyAgICAgICAgcHJpbnQgImFibm9ybWFsIGZpbmlzaCIK K0BlbmQgc21hbGxleGFtcGxlIAorQGVuZCBkZWZ1bgorCitAZGVmdmFyIEZp bmlzaEJyZWFrcG9pbnQucmV0dXJuX3ZhbHVlCitXaGVuIEB2YWx1ZXtHREJO fSBpcyBzdG9wcGVkIGF0IGEgZmluaXNoIGJyZWFrcG9pbnQgYW5kIHRoZSBm cmFtZSAKK3VzZWQgdG8gYnVpbGQgdGhlIEBjb2Rle2dkYi5GaW5pc2hCcmVh a3BvaW50fSBvYmplY3QgaGFkIGRlYnVnIHN5bWJvbHMsIHRoaXMKK2F0dHJp YnV0ZSB3aWxsIGNvbnRhaW4gYSBAY29kZXtnZGIuVmFsdWV9IG9iamVjdCBj b3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4KK3ZhbHVlIG9mIHRoZSBmdW5j dGlvbi4gIFRoZSB2YWx1ZSB3aWxsIGJlIEBjb2Rle05vbmV9IGlmIHRoZSBy ZXR1cm4gdmFsdWUKK3dhcyBub3QgY29tcHV0YWJsZS4gVGhpcyBhdHRyaWJ1 dGUgaXMgbm90IHdyaXRhYmxlLgorQGVuZCBkZWZ2YXIKKwogQG5vZGUgTGF6 eSBTdHJpbmdzIEluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gUHl0aG9uIHJl cHJlc2VudGF0aW9uIG9mIGxhenkgc3RyaW5ncy4KIApkaWZmIC0tZ2l0IGEv Z2RiL2luZmNtZC5jIGIvZ2RiL2luZmNtZC5jCmluZGV4IDNlOGJmNWQuLjMz Y2UxZmMgMTAwNjQ0Ci0tLSBhL2dkYi9pbmZjbWQuYworKysgYi9nZGIvaW5m Y21kLmMKQEAgLTE0MTMsMTQgKzE0MTMsMTIgQEAgYWR2YW5jZV9jb21tYW5k IChjaGFyICphcmcsIGludCBmcm9tX3R0eSkKICAgdW50aWxfYnJlYWtfY29t bWFuZCAoYXJnLCBmcm9tX3R0eSwgMSk7CiB9CiAMCi0vKiBQcmludCB0aGUg cmVzdWx0IG9mIGEgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gn IGNvbW1hbmQuICAqLworLyogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVz dWx0IGF0IHRoZSBlbmQgb2YgYSAnZmluaXNoJyBjb21tYW5kL0JQLiAgKi8K IAotc3RhdGljIHZvaWQKLXByaW50X3JldHVybl92YWx1ZSAoc3RydWN0IHR5 cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUpCitzdHJ1 Y3QgdmFsdWUgKgorZ2V0X3JldHVybl92YWx1ZSAoc3RydWN0IHR5cGUgKmZ1 bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUpCiB7CiAgIHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHN0b3Bf cmVnaXN0ZXJzKTsKLSAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKLSAg c3RydWN0IHVpX3N0cmVhbSAqc3RiOwogICBzdHJ1Y3QgdmFsdWUgKnZhbHVl OwogICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1cnJlbnRfdWlvdXQ7CiAK QEAgLTE0NTEsNiArMTQ0OSwxOSBAQCBwcmludF9yZXR1cm5fdmFsdWUgKHN0 cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBl KQogICAgICAgaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywg XygiYmFkIHN3aXRjaCIpKTsKICAgICB9CiAKKyAgcmV0dXJuIHZhbHVlOwor fQorCisvKiBQcmludCB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gYXQgdGhl IGVuZCBvZiBhICdmaW5pc2gnIGNvbW1hbmQuICAqLworCitzdGF0aWMgdm9p ZAorcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBl LCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKK3sKKyAgc3RydWN0IHZhbHVl ICp2YWx1ZSA9IGdldF9yZXR1cm5fdmFsdWUgKGZ1bmNfdHlwZSwgdmFsdWVf dHlwZSk7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2hhaW47CisgIHN0cnVj dCB1aV9zdHJlYW0gKnN0YjsKKyAgc3RydWN0IHVpX291dCAqdWlvdXQgPSBj dXJyZW50X3Vpb3V0OworCiAgIGlmICh2YWx1ZSkKICAgICB7CiAgICAgICBz dHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyBvcHRzOwpkaWZmIC0tZ2l0IGEv Z2RiL2luZmVyaW9yLmggYi9nZGIvaW5mZXJpb3IuaAppbmRleCBjZmFlYTdm Li5mMTk4Njk2IDEwMDY0NAotLS0gYS9nZGIvaW5mZXJpb3IuaAorKysgYi9n ZGIvaW5mZXJpb3IuaApAQCAtMjY5LDYgKzI2OSw5IEBAIGV4dGVybiB2b2lk IGRldGFjaF9jb21tYW5kIChjaGFyICosIGludCk7CiAKIGV4dGVybiB2b2lk IG5vdGljZV9uZXdfaW5mZXJpb3IgKHB0aWRfdCwgaW50LCBpbnQpOwogCitl eHRlcm4gc3RydWN0IHZhbHVlICpnZXRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3Qg dHlwZSAqZnVuY190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUpOworCiAvKiBB ZGRyZXNzIGF0IHdoaWNoIGluZmVyaW9yIHN0b3BwZWQuICAqLwogCiBleHRl cm4gQ09SRV9BRERSIHN0b3BfcGM7CmRpZmYgLS1naXQgYS9nZGIvaW5mcnVu LmMgYi9nZGIvaW5mcnVuLmMKaW5kZXggZGI2YTVkMS4uNWNlMGM5NCAxMDA2 NDQKLS0tIGEvZ2RiL2luZnJ1bi5jCisrKyBiL2dkYi9pbmZydW4uYwpAQCAt NTYsNiArNTYsNyBAQAogI2luY2x1ZGUgInRyYWNlcG9pbnQuaCIKICNpbmNs dWRlICJjb250aW51YXRpb25zLmgiCiAjaW5jbHVkZSAiaW50ZXJwcy5oIgor I2luY2x1ZGUgInB5dGhvbi9weXRob24uaCIKIAogLyogUHJvdG90eXBlcyBm b3IgbG9jYWwgZnVuY3Rpb25zICovCiAKQEAgLTM2NSw3ICszNjYsOCBAQCBz aG93X3N0b3Bfb25fc29saWJfZXZlbnRzIChzdHJ1Y3QgdWlfZmlsZSAqZmls ZSwgaW50IGZyb21fdHR5LAogaW50IHN0b3BfYWZ0ZXJfdHJhcDsKIAogLyog U2F2ZSByZWdpc3RlciBjb250ZW50cyBoZXJlIHdoZW4gZXhlY3V0aW5nIGEg ImZpbmlzaCIgY29tbWFuZCBvciBhcmUKLSAgIGFib3V0IHRvIHBvcCBhIHN0 YWNrIGR1bW15IGZyYW1lLCBpZi1hbmQtb25seS1pZiBwcm9jZWVkX3RvX2Zp bmlzaCBpcyBzZXQuCisgICBhYm91dCB0byBwb3AgYSBzdGFjayBkdW1teSBm cmFtZSwgaWYtYW5kLW9ubHktaWYgcHJvY2VlZF90b19maW5pc2ggaXMgc2V0 CisgICBvciBhIFB5dGhvbiBGaW5pc2hCcmVha3BvaW50IGhhcyBiZWVuIGhp dC4KICAgIFRodXMgdGhpcyBjb250YWlucyB0aGUgcmV0dXJuIHZhbHVlIGZy b20gdGhlIGNhbGxlZCBmdW5jdGlvbiAoYXNzdW1pbmcKICAgIHZhbHVlcyBh cmUgcmV0dXJuZWQgaW4gYSByZWdpc3RlcikuICAqLwogCkBAIC01OTg1LDgg KzU5ODcsOSBAQCBub3JtYWxfc3RvcCAodm9pZCkKIAogICAvKiBTYXZlIHRo ZSBmdW5jdGlvbiB2YWx1ZSByZXR1cm4gcmVnaXN0ZXJzLCBpZiB3ZSBjYXJl LgogICAgICBXZSBtaWdodCBiZSBhYm91dCB0byByZXN0b3JlIHRoZWlyIHBy ZXZpb3VzIGNvbnRlbnRzLiAgKi8KLSAgaWYgKGluZmVyaW9yX3RocmVhZCAo KS0+Y29udHJvbC5wcm9jZWVkX3RvX2ZpbmlzaAotICAgICAgJiYgZXhlY3V0 aW9uX2RpcmVjdGlvbiAhPSBFWEVDX1JFVkVSU0UpCisgIGlmIChnZGJweV9p c19zdG9wcGVkX2F0X2ZpbmlzaF9icCAoaW5mZXJpb3JfdGhyZWFkICgpLT5j b250cm9sLnN0b3BfYnBzdGF0KQorICAgICAgfHwgKGluZmVyaW9yX3RocmVh ZCAoKS0+Y29udHJvbC5wcm9jZWVkX3RvX2ZpbmlzaAorICAgICAgICAgICYm IGV4ZWN1dGlvbl9kaXJlY3Rpb24gIT0gRVhFQ19SRVZFUlNFKSkKICAgICB7 CiAgICAgICAvKiBUaGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LiAgKi8K ICAgICAgIGlmIChzdG9wX3JlZ2lzdGVycykKZGlmZiAtLWdpdCBhL2dkYi9w eXRob24vcHktYnJlYWtwb2ludC5jIGIvZ2RiL3B5dGhvbi9weS1icmVha3Bv aW50LmMKaW5kZXggZGFjZWI5OS4uMzJiNWYxNiAxMDA2NDQKLS0tIGEvZ2Ri L3B5dGhvbi9weS1icmVha3BvaW50LmMKKysrIGIvZ2RiL3B5dGhvbi9weS1i cmVha3BvaW50LmMKQEAgLTMxLDUyICszMSwxOCBAQAogI2luY2x1ZGUgImFy Y2gtdXRpbHMuaCIKICNpbmNsdWRlICJsYW5ndWFnZS5oIgogCi1zdGF0aWMg UHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGU7CitQeVR5cGVP YmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZTsKIAogLyogTnVtYmVyIG9m IGxpdmUgYnJlYWtwb2ludHMuICAqLwogc3RhdGljIGludCBicHB5X2xpdmU7 CiAKIC8qIFZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0 d2VlbiB0aGUgQnJlYWtwb2ludAogICAgY29uc3RydWN0b3IgYW5kIHRoZSBi cmVha3BvaW50LWNyZWF0ZWQgaG9vayBmdW5jdGlvbi4gICovCi1zdGF0aWMg YnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7CiticmVh a3BvaW50X29iamVjdCAqYnBweV9wZW5kaW5nX29iamVjdDsKIAogLyogRnVu Y3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhIFB5dGhvbiBjb25kaXRpb24g aXMgZXZhbHVhdGVkLiAgKi8KIHN0YXRpYyBjaGFyICogY29uc3Qgc3RvcF9m dW5jID0gInN0b3AiOwogCi1zdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QKLXsK LSAgUHlPYmplY3RfSEVBRAotCi0gIC8qIFRoZSBicmVha3BvaW50IG51bWJl ciBhY2NvcmRpbmcgdG8gZ2RiLiAgKi8KLSAgaW50IG51bWJlcjsKLQotICAv KiBUaGUgZ2RiIGJyZWFrcG9pbnQgb2JqZWN0LCBvciBOVUxMIGlmIHRoZSBi cmVha3BvaW50IGhhcyBiZWVuCi0gICAgIGRlbGV0ZWQuICAqLwotICBzdHJ1 Y3QgYnJlYWtwb2ludCAqYnA7Ci19OwotCi0vKiBSZXF1aXJlIHRoYXQgQlJF QUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93IGEgUHl0 aG9uCi0gICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4gICovCi0jZGVm aW5lIEJQUFlfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50KQkJCQkJXAotICAg IGRvIHsJCQkJCQkJCVwKLSAgICAgIGlmICgoQnJlYWtwb2ludCktPmJwID09 IE5VTEwpCQkJCQlcCi0JcmV0dXJuIFB5RXJyX0Zvcm1hdCAoUHlFeGNfUnVu dGltZUVycm9yLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCSAgICAg XygiQnJlYWtwb2ludCAlZCBpcyBpbnZhbGlkLiIpLAkJXAotCQkJICAgICAo QnJlYWtwb2ludCktPm51bWJlcik7CQkJXAotICAgIH0gd2hpbGUgKDApCi0K LS8qIFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtw b2ludCBJRDsgdGhyb3cgYSBQeXRob24KLSAgIGV4Y2VwdGlvbiBpZiBpdCBp cyBpbnZhbGlkLiAgVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHNldHRlciBm dW5jdGlvbnMuICAqLwotI2RlZmluZSBCUFBZX1NFVF9SRVFVSVJFX1ZBTElE KEJyZWFrcG9pbnQpCQkJCVwKLSAgICBkbyB7CQkJCQkJCQlcCi0gICAgICBp ZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKQkJCQkJXAotICAgICAgICB7 CQkJCQkJCQlcCi0JICBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJv ciwgXygiQnJlYWtwb2ludCAlZCBpcyBpbnZhbGlkLiIpLCBcCi0JCQkoQnJl YWtwb2ludCktPm51bWJlcik7CQkJCVwKLQkgIHJldHVybiAtMTsJCQkJCQkJ XAotCX0JCQkJCQkJCVwKLSAgICB9IHdoaWxlICgwKQotCiAvKiBUaGlzIGlz IHVzZWQgdG8gaW5pdGlhbGl6ZSB2YXJpb3VzIGdkYi5icF8qIGNvbnN0YW50 cy4gICovCiBzdHJ1Y3QgcHlicF9jb2RlCiB7CkBAIC03NTcsNiArNzIzLDE0 IEBAIGdkYnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmpl Y3QgKmJwX29iaikKICAgICAgIGVsc2UKIAlnZGJweV9wcmludF9zdGFjayAo KTsKICAgICB9CisKKyAgLyogSWYgaXQncyBhIHRlbXBvcmFyeSBicmVha3Bv aW50LiAgKi8KKyAgaWYgKGItPmRpc3Bvc2l0aW9uID09IGRpc3BfZGVsKQor ICAgIHsKKyAgICAgIC8qIENhbid0IGRlbGV0ZSBpdCBoZXJlLiAgKi8KKyAg ICAgIGRpc2FibGVfYnJlYWtwb2ludCAoYik7CisgICAgfQorCiAgIGRvX2Ns ZWFudXBzIChjbGVhbnVwKTsKIAogICByZXR1cm4gc3RvcDsKQEAgLTgyMSw2 ICs3OTUsOCBAQCBnZGJweV9icmVha3BvaW50X2NyZWF0ZWQgKHN0cnVjdCBi cmVha3BvaW50ICpicCkKICAgICAgIG5ld2JwLT5icC0+cHlfYnBfb2JqZWN0 ID0gbmV3YnA7CiAgICAgICBQeV9JTkNSRUYgKG5ld2JwKTsKICAgICAgICsr YnBweV9saXZlOworCisgICAgICBicC0+aXNfcHlfZmluaXNoX2JwID0gYnBm aW5pc2hweV9pc19maW5pc2hfYnAgKChQeU9iamVjdCAqKSBuZXdicCk7CiAg ICAgfQogICBlbHNlCiAgICAgewpAQCAtOTgwLDcgKzk1Niw3IEBAIHN0YXRp YyBQeU1ldGhvZERlZiBicmVha3BvaW50X29iamVjdF9tZXRob2RzW10gPQog ICB7IE5VTEwgfSAvKiBTZW50aW5lbC4gICovCiB9OwogCi1zdGF0aWMgUHlU eXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQorUHlUeXBlT2Jq ZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQogewogICBQeU9iamVjdF9I RUFEX0lOSVQgKE5VTEwpCiAgIDAsCQkJCSAgLypvYl9zaXplKi8KZGlmZiAt LWdpdCBhL2dkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jIGIvZ2Ri L3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmYWE5YgotLS0gL2Rldi9udWxsCisr KyBiL2dkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCkBAIC0wLDAg KzEsMzkyIEBACisvKiBQeXRob24gaW50ZXJmYWNlIHRvIGZpbmlzaCBicmVh a3BvaW50cworCisgICBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisKKyNp bmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZXhjZXB0aW9ucy5oIgorI2lu Y2x1ZGUgInB5dGhvbi1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImJyZWFrcG9p bnQuaCIKKyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1ZGUgImdkYnRocmVh ZC5oIgorI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNsdWRlICJsYW5n dWFnZS5oIgorI2luY2x1ZGUgIm9ic2VydmVyLmgiCisjaW5jbHVkZSAiaW5m ZXJpb3IuaCIKKworc3RhdGljIFB5VHlwZU9iamVjdCBmaW5pc2hfYnJlYWtw b2ludF9vYmplY3RfdHlwZTsKKworLyogRnVuY3Rpb24gdGhhdCBpcyBjYWxs ZWQgd2hlbiBhIFB5dGhvbiBmaW5pc2ggYnAgaXMgZm91bmQgb3V0IG9mIHNj b3BlLiAgKi8KK3N0YXRpYyBjaGFyICogY29uc3Qgb3V0b2ZzY29wZV9mdW5j ID0gIm91dF9vZl9zY29wZSI7CisKKy8qIHN0cnVjdCBpbXBsZW1lbnRpbmcg dGhlIGdkYi5GaW5pc2hCcmVha3BvaW50IG9iamVjdCBieSBleHRlbmRpbmcK KyAgIHRoZSBnZGIuQnJlYWtwb2ludCBjbGFzcy4gICovCitzdHJ1Y3QgZmlu aXNoX2JyZWFrcG9pbnRfb2JqZWN0Cit7CisgIC8qIGdkYi5CcmVha3BvaW50 IGJhc2UgY2xhc3MuICAqLworICBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3Qg cHlfYnA7CisgIC8qIGdkYi5UeXBlIG9iamVjdCBvZiB0aGUgZnVuY3Rpb24g ZmluaXNoZWQgYnkgdGhpcyBicmVha3BvaW50LiAgKi8KKyAgUHlPYmplY3Qg KmZ1bmN0aW9uX3R5cGU7CisgIC8qIGdkYi5UeXBlIG9iamVjdCBvZiB0aGUg dmFsdWUgcmV0dXJuIGJ5IHRoZSBicmVha3BvaW50ZWQgZnVuY3Rpb24uICAq LworICBQeU9iamVjdCAqcmV0dXJuX3R5cGU7CisgIC8qIFdoZW4gc3RvcHBl ZCBhdCB0aGlzIEZpbmlzaEJyZWFrcG9pbnQsIHZhbHVlIHJldHVybmVkIGJ5 IHRoZSBmdW5jdGlvbjsKKyAgICAgUHlfTm9uZSBpZiB0aGUgdmFsdWUgaXMg bm90IGNvbXB1dGFibGU7CisgICAgIE5VTEwgaWYgR0RCIGlzIG5vdCBzdG9w cGVkIGF0IGEgRmluaXNoQnJlYWtwb2ludC4gICovCisgIFB5T2JqZWN0ICpy ZXR1cm5fdmFsdWU7Cit9OworCisvKiBUcmlnZ2VyZWQgd2hlbiBHREIgc3Rv cHMgYXQgUFlfQlAuIENvbXB1dGVzIGFuZCBjYWNoZXMgdGhlIGByZXR1cm5f dmFsdWUnLAorICAgaWYgcG9zc2libGUuICAqLworCitzdGF0aWMgdm9pZAor YnBmaW5pc2hfc3RvcHBlZF9hdF9maW5pc2hfYnAgKHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QgKnB5X2JwKQoreworICBpZiAocHlfYnAtPnJl dHVybl90eXBlKQorICAgIHsKKyAgICAgIHN0cnVjdCB2YWx1ZSAqcmV0ID0K KyAgICAgICAgICBnZXRfcmV0dXJuX3ZhbHVlICh0eXBlX29iamVjdF90b190 eXBlIChweV9icC0+ZnVuY3Rpb25fdHlwZSksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZV9vYmplY3RfdG9fdHlwZSAocHlfYnAtPnJldHVy bl90eXBlKSk7CisgICAgICBpZiAocmV0KQorICAgICAgICB7CisgICAgICAg ICAgcHlfYnAtPnJldHVybl92YWx1ZSA9IHZhbHVlX3RvX3ZhbHVlX29iamVj dCAocmV0KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBweV9i cC0+cmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKKyAgICB9Cit9CisKKy8qIFB5 dGhvbiBmdW5jdGlvbiB0byBnZXQgdGhlICdyZXR1cm5fdmFsdWUnIGF0dHJp YnV0ZSBvZgorICAgRmluaXNoQnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBQ eU9iamVjdCAqCiticGZpbmlzaHB5X2dldF9yZXR1cm52YWx1ZSAoUHlPYmpl Y3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgIHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QgKnNlbGZfZmluaXNoYnAgPQorICAgICAgKHN0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKworICBp ZiAoc2VsZl9maW5pc2hicC0+cmV0dXJuX3R5cGUgPT0gTlVMTCkKKyAgICBQ eV9SRVRVUk5fTk9ORTsKKworICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgY2Fj aGVkIHZhbHVlLiAgKi8KKyAgaWYgKCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5f dmFsdWUpCisgICAgeworICAgICAgYnBzdGF0IGJzOworCisgICAgICBCUFBZ X1JFUVVJUkVfVkFMSUQgKCZzZWxmX2ZpbmlzaGJwLT5weV9icCk7CisKKyAg ICAgIGZvciAoYnMgPSBpbmZlcmlvcl90aHJlYWQgKCktPmNvbnRyb2wuc3Rv cF9icHN0YXQ7CisgICAgICAgICAgYnM7IGJzID0gYnMtPm5leHQpCisgICAg ICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnAgPSBicy0+ YnJlYWtwb2ludF9hdDsKKworICAgICAgICAgIGlmIChicCAhPSBOVUxMICYm IChQeU9iamVjdCAqKSBicC0+cHlfYnBfb2JqZWN0ID09IHNlbGYpCisgICAg ICAgICAgICAgIGJwZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2JwIChzZWxm X2ZpbmlzaGJwKTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoIXNlbGZf ZmluaXNoYnAtPnJldHVybl92YWx1ZSkKKyAgICBQeV9SRVRVUk5fTk9ORTsK KworICBQeV9JTkNSRUYgKHNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSk7 CisgIHJldHVybiBzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWU7Cit9CisK Ky8qIElmIFNUT1BfQlBTVEFUIGNvbnRhaW5zIGEgUHl0aG9uIGJyZWFrcG9p bnQgd2hvc2UgdHlwZSBpcyBUWVBFLCByZXR1cm5zCisgICB0aGlzIGJyZWFr cG9pbnQuIFJldHVybnMgTlVMTCBvdGhlcndpc2UuICAqLworCitzdHJ1Y3Qg YnJlYWtwb2ludCAqCitnZGJweV9pc19zdG9wcGVkX2F0X2ZpbmlzaF9icCAo YnBzdGF0IHN0b3BfYnBzdGF0KQoreworICBicHN0YXQgYnM7CisKKyAgZm9y IChicyA9IHN0b3BfYnBzdGF0OyBiczsgYnMgPSBicy0+bmV4dCkKKyAgICB7 CisgICAgICBpZiAoYnMtPmJyZWFrcG9pbnRfYXQgJiYgYnMtPmJyZWFrcG9p bnRfYXQtPmlzX3B5X2ZpbmlzaF9icCkKKyAgICAgICAgcmV0dXJuIGJzLT5i cmVha3BvaW50X2F0OworICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwor LyogUHl0aG9uIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBicmVha3BvaW50 LiAgKi8KKworc3RhdGljIGludAorYnBmaW5pc2hweV9pbml0IChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7 CisgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyAiZnJhbWUiLCAiaW50 ZXJuYWwiLCBOVUxMIH07CisgIGJyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2Jw ID0gKGJyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIHN0cnVjdCBmaW5p c2hfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnBmaW5pc2ggPQorICAgICAg KHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKyAg aW50IHR5cGUgPSBicF9icmVha3BvaW50OworICBQeU9iamVjdCAqZnJhbWVf b2JqID0gTlVMTDsKKyAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCAqcHJl dl9mcmFtZTsKKyAgc3RydWN0IGZyYW1lX2lkIGZyYW1lX2lkOworICBQeU9i amVjdCAqaW50ZXJuYWwgPSBOVUxMOworICBpbnQgaW50ZXJuYWxfYnAgPSAw OworICBDT1JFX0FERFIgZmluaXNoX3BjLCBwYzsKKyAgdm9sYXRpbGUgc3Ry dWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworICBjaGFyICphZGRyX3N0ciwg c21hbGxfYnVmWzEwMF07CisgIHN0cnVjdCBzeW1ib2wgKmZ1bmN0aW9uOwor CisgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyAoYXJncywg a3dhcmdzLCAiT3xPIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmZyYW1lX29iaiwgJmludGVybmFsKSkKKyAg ICByZXR1cm4gLTE7CisKKyAgaWYgKCFmcmFtZV9vYmopCisgICAgZ290byBp bnZhbGlkX2ZyYW1lOworICAKKyAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9f ZnJhbWVfaW5mbyAoZnJhbWVfb2JqKTsKKyAgaWYgKGZyYW1lID09IE5VTEwp CisgICAgZ290byBpbnZhbGlkX2ZyYW1lOworICAKKyAgcHJldl9mcmFtZSA9 IGdldF9wcmV2X2ZyYW1lIChmcmFtZSk7CisgIGlmIChwcmV2X2ZyYW1lID09 IDApCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1 ZUVycm9yLCAKKyAgICAgICAgICAgXygiXCJGaW5pc2hCcmVha3BvaW50XCIg bm90IG1lYW5pbmdmdWwgaW4gdGhlIG91dGVybW9zdCBmcmFtZS4iKSk7Cisg ICAgICByZXR1cm4gLTE7CisgICAgfQorICBlbHNlIGlmIChnZXRfZnJhbWVf dHlwZShwcmV2X2ZyYW1lKSA9PSBEVU1NWV9GUkFNRSkKKyAgICAgIHsKKyAg ICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLAorICAg ICAgICAgICAgICAgICAgXygiXCJGaW5pc2hCcmVha3BvaW50XCIgY2Fubm90 IGJlIHNldCBvbiBhIGR1bW15IGZyYW1lLiIpKTsKKyAgICAgICAgcmV0dXJu IC0xOworICAgICAgfQorCisgIGZyYW1lX2lkID0gZ2V0X2ZyYW1lX2lkIChw cmV2X2ZyYW1lKTsKKyAgaWYgKGZyYW1lX2lkX2VxIChmcmFtZV9pZCwgbnVs bF9mcmFtZV9pZCkpCisgICAgZ290byBpbnZhbGlkX2ZyYW1lOworCisgIGlm IChpbnRlcm5hbCkKKyAgICB7CisgICAgICBpbnRlcm5hbF9icCA9IFB5T2Jq ZWN0X0lzVHJ1ZSAoaW50ZXJuYWwpOworICAgICAgaWYgKGludGVybmFsX2Jw ID09IC0xKSAKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmlu ZyAoUHlFeGNfVmFsdWVFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBfKCJUaGUgdmFsdWUgb2YgYGludGVybmFsJyBtdXN0IGJlIGEgYm9v bGVhbi4iKSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9Cisg ICAgfQorCisgIC8qIEZpbmQgdGhlIGZ1bmN0aW9uIHdlIHdpbGwgcmV0dXJu IGZyb20uICAqLworICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IE5V TEw7CisgIHNlbGZfYnBmaW5pc2gtPmZ1bmN0aW9uX3R5cGUgPSBOVUxMOwor ICBpZiAoZ2V0X2ZyYW1lX3BjX2lmX2F2YWlsYWJsZSAoZnJhbWUsICZwYykp CisgICAgeworICAgICAgZnVuY3Rpb24gPSBmaW5kX3BjX2Z1bmN0aW9uIChw Yyk7CisgICAgICBpZiAoZnVuY3Rpb24gIT0gTlVMTCkKKyAgICAgICAgewor ICAgICAgICAgIHN0cnVjdCB0eXBlICpyZXRfdHlwZSA9IFRZUEVfVEFSR0VU X1RZUEUgKFNZTUJPTF9UWVBFIChmdW5jdGlvbikpOworCisgICAgICAgICAg LyogUmVtZW1iZXIgb25seSBub24tVk9JRCByZXR1cm4gdHlwZXMuICAqLwor ICAgICAgICAgIGlmIChUWVBFX0NPREUgKHJldF90eXBlKSAhPSBUWVBFX0NP REVfVk9JRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2VsZl9i cGZpbmlzaC0+cmV0dXJuX3R5cGUgPSB0eXBlX3RvX3R5cGVfb2JqZWN0IChy ZXRfdHlwZSk7CisgICAgICAgICAgICAgIHNlbGZfYnBmaW5pc2gtPmZ1bmN0 aW9uX3R5cGUgPQorICAgICAgICAgICAgICAgICAgdHlwZV90b190eXBlX29i amVjdCAoU1lNQk9MX1RZUEUgKGZ1bmN0aW9uKSk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisKKyAgYnBweV9wZW5kaW5nX29iamVjdCA9 IHNlbGZfYnA7CisgIGJwcHlfcGVuZGluZ19vYmplY3QtPm51bWJlciA9IC0x OworICBicHB5X3BlbmRpbmdfb2JqZWN0LT5icCA9IE5VTEw7CisKKyAgVFJZ X0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAg ICAvKiBTZXQgYSBicmVha3BvaW50IG9uIHRoZSByZXR1cm4gYWRkcmVzcy4g ICovCisgICAgICBmaW5pc2hfcGMgPSBnZXRfZnJhbWVfcGMgKHByZXZfZnJh bWUpOworICAgICAgc3ByaW50ZiAoc21hbGxfYnVmLCAiKiVzIiwgaGV4X3N0 cmluZyAoZmluaXNoX3BjKSk7CisgICAgICBhZGRyX3N0ciA9IHNtYWxsX2J1 ZjsKKworICAgICAgY3JlYXRlX2JyZWFrcG9pbnQgKHB5dGhvbl9nZGJhcmNo LAorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfc3RyLCBOVUxMLCAt MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg ICAgICAgICAgICAgIDEgLyp0ZW1wX2ZsYWcqLywKKyAgICAgICAgICAgICAg ICAgICAgICAgICBicF9icmVha3BvaW50LAorICAgICAgICAgICAgICAgICAg ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgQVVUT19CT09M RUFOX1RSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmJrcHRfYnJl YWtwb2ludF9vcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwg aW50ZXJuYWxfYnApOworICAgIH0KKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAw KQorICAgIHsKKyAgICAgIFB5RXJyX0Zvcm1hdCAoZXhjZXB0LnJlYXNvbiA9 PSBSRVRVUk5fUVVJVAorICAgICAgICAgICAgICAgICAgICA/IFB5RXhjX0tl eWJvYXJkSW50ZXJydXB0IDogUHlFeGNfUnVudGltZUVycm9yLAorICAgICAg ICAgICAgICAgICAgICAiJXMiLCBleGNlcHQubWVzc2FnZSk7CisgICAgICBy ZXR1cm4gLTE7CisgICAgfQorICBCUFBZX1NFVF9SRVFVSVJFX1ZBTElEIChz ZWxmX2JwKTsKKyAgCisgIHNlbGZfYnAtPmJwLT5mcmFtZV9pZCA9IGZyYW1l X2lkOworICAKKyAgcmV0dXJuIDA7CisgIAorIGludmFsaWRfZnJhbWU6Cisg IFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwgCisgICAgICAg ICAgICAgICAgICAgXygiSW52YWxpZCBJRCBmb3IgdGhlIGBmcmFtZScgb2Jq ZWN0LiIpKTsKKyAgcmV0dXJuIC0xOworfQorCisvKiBSZXR1cm5zIDEgaWYg T0JKIGlzIG5vdCBOVUxMIGFuZCByZWZlcmVuY2VzIGEgRmluaXNoQnJlYWtw b2ludCBvYmplY3QuICAqLworCitpbnQKK2JwZmluaXNocHlfaXNfZmluaXNo X2JwIChQeU9iamVjdCAqb2JqKQoreworICByZXR1cm4gb2JqICE9IE5VTEwK KyAgICAgICAgICYmIFB5T2JqZWN0X1R5cGVDaGVjayAob2JqLCAmZmluaXNo X2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUpOworfQorCisvKiBDYWxsZWQgd2hl biBHREIgbm90aWNlcyB0aGF0IHRoZSBmaW5pc2ggYnJlYWtwb2ludCBCUF9P QkogaXMgb3V0IG9mCisgICB0aGUgY3VycmVudCBjYWxsc3RhY2suIFRyaWdn ZXJzIHRoZSBtZXRob2QgT1VUX09GX1NDT1BFIGlmIGltcGxlbWVudGVkLAor ICAgdGhlbiBkZWxldGUgdGhlIGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMg dm9pZAorYnBmaW5pc2hweV9vdXRfb2Zfc2NvcGUgKHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QgKmJwZmluaXNoX29iaikKK3sKKyAgYnJlYWtw b2ludF9vYmplY3QgKmJwX29iaiA9IChicmVha3BvaW50X29iamVjdCAqKSBi cGZpbmlzaF9vYmo7CisgIFB5T2JqZWN0ICpweV9vYmogPSAoUHlPYmplY3Qg KikgYnBfb2JqOworCisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nIChw eV9vYmosIG91dG9mc2NvcGVfZnVuYykpCisgICAgeworICAgICAgaWYgKCFQ eU9iamVjdF9DYWxsTWV0aG9kIChweV9vYmosIG91dG9mc2NvcGVfZnVuYywg TlVMTCkpCisgICAgICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAg fQorCisgIGRlbGV0ZV9icmVha3BvaW50IChicGZpbmlzaF9vYmotPnB5X2Jw LmJwKTsKK30KKworLyogQ2FsbGJhY2sgZm9yIGBicGZpbmlzaHB5X2RldGVj dF9vdXRfc2NvcGUnLiAgVHJpZ2dlcnMgUHl0aG9uJ3MKKyAgIGBCLT5vdXRf b2Zfc2NvcGUnIGZ1bmN0aW9uIGlmIEIgaXMgYSBGaW5pc2hCcmVha3BvaW50 IG91dCBvZiBpdHMKKyAgIHNjb3BlIG9yIHR1cm4gb2Ygb3V0X29mX3Njb3Bl IG5vdGlmaWNhdGlvbiBpZiBCIGhhcyBiZWVuIGhpdC4gICovCisKK3N0YXRp YyBpbnQKK2JwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZV9jYiAoc3RydWN0 IGJyZWFrcG9pbnQgKmIsIHZvaWQgKmFyZ3MpCit7CisgIHN0cnVjdCBicmVh a3BvaW50ICpicF9zdG9wcGVkID0gKHN0cnVjdCBicmVha3BvaW50ICopIGFy Z3M7CisgIFB5T2JqZWN0ICpweV9icCA9IChQeU9iamVjdCAqKSBiLT5weV9i cF9vYmplY3Q7CisgIHN0cnVjdCBnZGJhcmNoICpnYXJjaCA9IGItPmdkYmFy Y2ggPyBiLT5nZGJhcmNoIDogZ2V0X2N1cnJlbnRfYXJjaCAoKTsKKyAgc3Ry dWN0IGNsZWFudXAgKmNsZWFudXAgPSBlbnN1cmVfcHl0aG9uX2VudiAoZ2Fy Y2gsIGN1cnJlbnRfbGFuZ3VhZ2UpOworICAKKyAgLyogVHJpZ2dlciBvdXRf b2Zfc2NvcGUgaWYgdGhpcyBpcyBhIEZpbmlzaEJyZWFrcG9pbnQgYW5kIGl0 cyBmcmFtZSBpcworICAgICBub3QgYW55bW9yZSBpbiB0aGUgY3VycmVudCBj YWxsc3RhY2suICAqLworICBpZiAoYnBmaW5pc2hweV9pc19maW5pc2hfYnAg KHB5X2JwKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9p bnRfb2JqZWN0ICpmaW5pc2hfYnAgPQorICAgICAgICAgIChzdHJ1Y3QgZmlu aXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHB5X2JwOworCisgICAgICBpZiAo YiA9PSBicF9zdG9wcGVkKQorICAgICAgICBicGZpbmlzaF9zdG9wcGVkX2F0 X2ZpbmlzaF9icCAoZmluaXNoX2JwKTsKKyAgICAgIGVsc2UgaWYgKGItPnBz cGFjZSA9PSBjdXJyZW50X2luZmVyaW9yKCktPnBzcGFjZQorICAgICAgICAg ICAmJiAoIXRhcmdldF9oYXNfcmVnaXN0ZXJzCisgICAgICAgICAgICAgICB8 fCBmcmFtZV9maW5kX2J5X2lkKGItPmZyYW1lX2lkKSA9PSBOVUxMKSkKKyAg ICAgICAgeworICAgICAgICAgIGJwZmluaXNocHlfb3V0X29mX3Njb3BlIChm aW5pc2hfYnApOworICAgICAgICB9CisgICAgfQorICAKKyAgZG9fY2xlYW51 cHMgKGNsZWFudXApOworICAKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEF0dGFj aGVkIHRvIGBzdG9wJyBub3RpZmljYXRpb25zLCBjaGVjayBpZiB0aGUgZXhl Y3V0aW9uIGhhcyBydW4gb3V0ZworICAgb3V0IG9mIHRoZSBzY29wZSBvZiBh bnkgRmluaXNoQnJlYWtwb2ludCBiZWZvcmUgaXQgaGFzIGJlZW4gaGl0LiAg Ki8KKworc3RhdGljIHZvaWQKK2JwZmluaXNocHlfaGFuZGxlX3N0b3AgKHN0 cnVjdCBicHN0YXRzICpicywgaW50IHByaW50X2ZyYW1lKQoreworICBpdGVy YXRlX292ZXJfYnJlYWtwb2ludHMgKGJwZmluaXNocHlfZGV0ZWN0X291dF9z Y29wZV9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicyA9PSBO VUxMID8gTlVMTCA6IGJzLT5icmVha3BvaW50X2F0KTsKK30KKworLyogQXR0 YWNoZWQgdG8gYGV4aXQnIG5vdGlmaWNhdGlvbnMsIHRyaWdnZXJzIGFsbCB0 aGUgbmVjZXNzYXJ5IG91dCBvZgorICAgc2NvcGUgbm90aWZpY2F0aW9ucy4g ICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5X2hhbmRsZV9leGl0IChz dHJ1Y3QgaW5mZXJpb3IgKmluZikKK3sKKyAgaXRlcmF0ZV9vdmVyX2JyZWFr cG9pbnRzIChicGZpbmlzaHB5X2RldGVjdF9vdXRfc2NvcGVfY2IsIE5VTEwp OworfQorCisvKiBJbml0aWFsaXplIHRoZSBQeXRob24gZmluaXNoIGJyZWFr cG9pbnQgY29kZS4gICovCisKK3ZvaWQKK2dkYnB5X2luaXRpYWxpemVfZmlu aXNoYnJlYWtwb2ludHMgKHZvaWQpCit7CisgIGlmIChQeVR5cGVfUmVhZHkg KCZmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSkgPCAwKQorICAgICAg cmV0dXJuOworICAKKyAgUHlfSU5DUkVGICgmZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0X3R5cGUpOworICBQeU1vZHVsZV9BZGRPYmplY3QgKGdkYl9tb2R1 bGUsICJGaW5pc2hCcmVha3BvaW50IiwKKyAgICAgICAgICAgICAgICAgICAg ICAoUHlPYmplY3QgKikgJmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBl KTsKKyAgICAKKyAgb2JzZXJ2ZXJfYXR0YWNoX25vcm1hbF9zdG9wIChicGZp bmlzaHB5X2hhbmRsZV9zdG9wKTsKKyAgb2JzZXJ2ZXJfYXR0YWNoX2luZmVy aW9yX2V4aXQgKGJwZmluaXNocHlfaGFuZGxlX2V4aXQpOworfQorCitzdGF0 aWMgUHlHZXRTZXREZWYgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNl dFtdID0geworICB7ICJyZXR1cm5fdmFsdWUiLCBicGZpbmlzaHB5X2dldF9y ZXR1cm52YWx1ZSwgTlVMTCwKKyAgImdkYi5WYWx1ZSBvYmplY3QgcmVwcmVz ZW50aW5nIHRoZSByZXR1cm4gdmFsdWUsIGlmIGFueS4gXAorTm9uZSBvdGhl cndpc2UuIiwgTlVMTCB9LAorICAgIHsgTlVMTCB9ICAvKiBTZW50aW5lbC4g ICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IGZpbmlzaF9icmVha3Bv aW50X29iamVjdF90eXBlID0KK3sKKyAgUHlPYmplY3RfSEVBRF9JTklUIChO VUxMKQorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qb2Jf c2l6ZSovCisgICJnZGIuRmluaXNoQnJlYWtwb2ludCIsICAgICAgICAgLyp0 cF9uYW1lKi8KKyAgc2l6ZW9mIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0KSwgIC8qdHBfYmFzaWNzaXplKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRh dHRyKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRw X2NvbXBhcmUqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qdHBfcmVwciovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyp0cF9hc19udW1iZXIqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRy byovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9z ZXRhdHRybyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qdHBfYXNfYnVmZmVyKi8KKyAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlf VFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAiR0RCIGZpbmlz aCBicmVha3BvaW50IG9iamVjdCIsIC8qIHRwX2RvYyAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9y aWNoY29tcGFyZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21l bWJlcnMgKi8KKyAgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNldCwv KiB0cF9nZXRzZXQgKi8KKyAgJmJyZWFrcG9pbnRfb2JqZWN0X3R5cGUsICAg ICAgICAvKiB0cF9iYXNlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfZGljdCAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZz ZXQgKi8KKyAgYnBmaW5pc2hweV9pbml0LCAgICAgICAgICAgICAgICAvKiB0 cF9pbml0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfYWxsb2MgKi8KKyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9uZXcgKi8KK307CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9u L3B5LWZyYW1lLmMgYi9nZGIvcHl0aG9uL3B5LWZyYW1lLmMKaW5kZXggMzk4 Y2U4NC4uYzQ0OTRjYiAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1mcmFt ZS5jCisrKyBiL2dkYi9weXRob24vcHktZnJhbWUuYwpAQCAtNjAsOSArNjAs MTAgQEAgc3RhdGljIFB5VHlwZU9iamVjdCBmcmFtZV9vYmplY3RfdHlwZTsK ICAgIG9iamVjdC4gIElmIHRoZSBmcmFtZSBkb2Vzbid0IGV4aXN0IGFueW1v cmUgKHRoZSBmcmFtZSBpZCBkb2Vzbid0CiAgICBjb3JyZXNwb25kIHRvIGFu eSBmcmFtZSBpbiB0aGUgaW5mZXJpb3IpLCByZXR1cm5zIE5VTEwuICAqLwog Ci1zdGF0aWMgc3RydWN0IGZyYW1lX2luZm8gKgotZnJhbWVfb2JqZWN0X3Rv X2ZyYW1lX2luZm8gKGZyYW1lX29iamVjdCAqZnJhbWVfb2JqKQorc3RydWN0 IGZyYW1lX2luZm8gKgorZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5 T2JqZWN0ICpvYmopCiB7CisgIGZyYW1lX29iamVjdCAqZnJhbWVfb2JqID0g KGZyYW1lX29iamVjdCAqKSBvYmo7ICAKICAgc3RydWN0IGZyYW1lX2luZm8g KmZyYW1lOwogCiAgIGZyYW1lID0gZnJhbWVfZmluZF9ieV9pZCAoZnJhbWVf b2JqLT5mcmFtZV9pZCk7CkBAIC0xMDMsNyArMTA0LDcgQEAgZnJhcHlfaXNf dmFsaWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAg c3RydWN0IGZyYW1lX2luZm8gKmZyYW1lOwogCi0gIGZyYW1lID0gZnJhbWVf b2JqZWN0X3RvX2ZyYW1lX2luZm8gKChmcmFtZV9vYmplY3QgKikgc2VsZik7 CisgIGZyYW1lID0gZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKHNlbGYp OwogICBpZiAoZnJhbWUgPT0gTlVMTCkKICAgICBQeV9SRVRVUk5fRkFMU0U7 CiAKQEAgLTEyNCw3ICsxMjUsNyBAQCBmcmFweV9uYW1lIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQs IFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJF X1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAg ZmluZF9mcmFtZV9mdW5uYW1lIChmcmFtZSwgJm5hbWUsICZsYW5nLCBOVUxM KTsKICAgICB9CkBAIC0xNTMsNyArMTU0LDcgQEAgZnJhcHlfdHlwZSAoUHlP YmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAo ZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlf UkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7 CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAK ICAgICAgIHR5cGUgPSBnZXRfZnJhbWVfdHlwZSAoZnJhbWUpOwogICAgIH0K QEAgLTE3NCw3ICsxNzUsNyBAQCBmcmFweV91bndpbmRfc3RvcF9yZWFzb24g KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZS QVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJh bWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUp OwogICAgIH0KICAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7 CiAKQEAgLTE5NSw3ICsxOTYsNyBAQCBmcmFweV9wYyAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHBj ID0gZ2V0X2ZyYW1lX3BjIChmcmFtZSk7CiAgICAgfQpAQCAtMjE2LDcgKzIx Nyw3IEBAIGZyYXB5X2Jsb2NrIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg KmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FM TCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVf b2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVf VkFMSUQgKHNlbGYsIGZyYW1lKTsKICAgICAgIGJsb2NrID0gZ2V0X2ZyYW1l X2Jsb2NrIChmcmFtZSwgTlVMTCk7CiAgICAgfQogICBHREJfUFlfSEFORExF X0VYQ0VQVElPTiAoZXhjZXB0KTsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBmcmFw eV9mdW5jdGlvbiAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQog CiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAg ewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAq KSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChz ZWxmLCBmcmFtZSk7CiAKICAgICAgIHN5bSA9IGZpbmRfcGNfZnVuY3Rpb24g KGdldF9mcmFtZV9hZGRyZXNzX2luX2Jsb2NrIChmcmFtZSkpOwogICAgIH0K QEAgLTMxOSw3ICszMjAsNyBAQCBmcmFweV9vbGRlciAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHBy ZXYgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUpOwogICAgICAgaWYgKHByZXYp CkBAIC0zNDgsNyArMzQ5LDcgQEAgZnJhcHlfbmV3ZXIgKFB5T2JqZWN0ICpz ZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwg UkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVf VkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAg RlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBu ZXh0ID0gZ2V0X25leHRfZnJhbWUgKGZyYW1lKTsKICAgICAgIGlmIChuZXh0 KQpAQCAtMzc3LDcgKzM3OCw3IEBAIGZyYXB5X2ZpbmRfc2FsIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAg ICAgZmluZF9mcmFtZV9zYWwgKGZyYW1lLCAmc2FsKTsKICAgICAgIHNhbF9v YmogPSBzeW10YWJfYW5kX2xpbmVfdG9fc2FsX29iamVjdCAoc2FsKTsKQEAg LTQzMyw3ICs0MzQsNyBAQCBmcmFweV9yZWFkX3ZhciAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKQogCiAgICAgICBUUllfQ0FUQ0ggKGV4Y2Vw dCwgUkVUVVJOX01BU0tfQUxMKQogCXsKLQkgIEZSQVBZX1JFUVVJUkVfVkFM SUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworCSAgRlJBUFlf UkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAJICBpZiAoIWJsb2Nr KQogCSAgICBibG9jayA9IGdldF9mcmFtZV9ibG9jayAoZnJhbWUsIE5VTEwp OwpAQCAtNDYxLDcgKzQ2Miw3IEBAIGZyYXB5X3JlYWRfdmFyIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAg ICAgdmFsID0gcmVhZF92YXJfdmFsdWUgKHZhciwgZnJhbWUpOwogICAgIH0K QEAgLTQ3NiwxMiArNDc3LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqCiBmcmFw eV9zZWxlY3QgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsK ICAgc3RydWN0IGZyYW1lX2luZm8gKmZpOwotICBmcmFtZV9vYmplY3QgKmZy YW1lID0gKGZyYW1lX29iamVjdCAqKSBzZWxmOwogICB2b2xhdGlsZSBzdHJ1 Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CiAKICAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEIChmcmFtZSwgZmkpOworICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoc2VsZiwgZmkpOwogCiAgICAgICBzZWxlY3RfZnJhbWUgKGZpKTsK ICAgICB9CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5h bC5oIGIvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaAppbmRleCBlNTkz NjEyLi40NmYwOGVkIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi1p bnRlcm5hbC5oCisrKyBiL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgK QEAgLTEyMCw5ICsxMjAsNDcgQEAgZXh0ZXJuIFB5VHlwZU9iamVjdCBzeW1i b2xfb2JqZWN0X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0IGV2ZW50X29i amVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCBldmVudHNfb2JqZWN0 X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0IHN0b3BfZXZlbnRfb2JqZWN0 X3R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0 X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Cit7 CisgIFB5T2JqZWN0X0hFQUQKKworICAvKiBUaGUgYnJlYWtwb2ludCBudW1i ZXIgYWNjb3JkaW5nIHRvIGdkYi4gICovCisgIGludCBudW1iZXI7CisKKyAg LyogVGhlIGdkYiBicmVha3BvaW50IG9iamVjdCwgb3IgTlVMTCBpZiB0aGUg YnJlYWtwb2ludCBoYXMgYmVlbgorICAgICBkZWxldGVkLiAgKi8KKyAgc3Ry dWN0IGJyZWFrcG9pbnQgKmJwOworfSBicmVha3BvaW50X29iamVjdDsKKwor LyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVha3Bv aW50IElEOyB0aHJvdyBhIFB5dGhvbgorICAgZXhjZXB0aW9uIGlmIGl0IGlz IGludmFsaWQuICAqLworI2RlZmluZSBCUFBZX1JFUVVJUkVfVkFMSUQoQnJl YWtwb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKChCcmVh a3BvaW50KS0+YnAgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gUHlFcnJfRm9ybWF0IChQ eUV4Y19SdW50aW1lRXJyb3IsICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJCcmVha3BvaW50ICVk IGlzIGludmFsaWQuIiksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoQnJlYWtwb2ludCktPm51bWJlcik7ICAgICAgICAg ICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKy8qIFJlcXVpcmUg dGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtwb2ludCBJRDsgdGhy b3cgYSBQeXRob24KKyAgIGV4Y2VwdGlvbiBpZiBpdCBpcyBpbnZhbGlkLiAg VGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHNldHRlciBmdW5jdGlvbnMuICAq LworI2RlZmluZSBCUFBZX1NFVF9SRVFVSVJFX1ZBTElEKEJyZWFrcG9pbnQp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgaWYgKChCcmVha3BvaW50KS0+YnAg PT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFB5 RXJyX0Zvcm1hdCAoUHlFeGNfUnVudGltZUVycm9yLCBfKCJCcmVha3BvaW50 ICVkIGlzIGludmFsaWQuIiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAg IChCcmVha3BvaW50KS0+bnVtYmVyKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisKKy8q IFZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0 aGUgQnJlYWtwb2ludAorICAgY29uc3RydWN0b3IgYW5kIHRoZSBicmVha3Bv aW50LWNyZWF0ZWQgaG9vayBmdW5jdGlvbi4gICovCitleHRlcm4gYnJlYWtw b2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7CiAKLS8qIERlZmlu ZWQgaW4gcHktYnJlYWtwb2ludC5jICovCi10eXBlZGVmIHN0cnVjdCBicmVh a3BvaW50X29iamVjdCBicmVha3BvaW50X29iamVjdDsKIAogdHlwZWRlZiBz dHJ1Y3QKIHsKQEAgLTE4OCw2ICsyMjYsOSBAQCBzdHJ1Y3QgdmFsdWUgKmNv bnZlcnRfdmFsdWVfZnJvbV9weXRob24gKFB5T2JqZWN0ICpvYmopOwogc3Ry dWN0IHR5cGUgKnR5cGVfb2JqZWN0X3RvX3R5cGUgKFB5T2JqZWN0ICpvYmop Owogc3RydWN0IHN5bXRhYiAqc3ltdGFiX29iamVjdF90b19zeW10YWIgKFB5 T2JqZWN0ICpvYmopOwogc3RydWN0IHN5bXRhYl9hbmRfbGluZSAqc2FsX29i amVjdF90b19zeW10YWJfYW5kX2xpbmUgKFB5T2JqZWN0ICpvYmopOworc3Ry dWN0IGZyYW1lX2luZm8gKmZyYW1lX29iamVjdF90b19mcmFtZV9pbmZvIChQ eU9iamVjdCAqZnJhbWVfb2JqKTsKKworaW50IGJwZmluaXNocHlfaXNfZmlu aXNoX2JwIChQeU9iamVjdCAqb2JqKTsKIAogdm9pZCBnZGJweV9pbml0aWFs aXplX2F1dG9fbG9hZCAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVf dmFsdWVzICh2b2lkKTsKQEAgLTIwMiw2ICsyNDMsNyBAQCB2b2lkIGdkYnB5 X2luaXRpYWxpemVfZnVuY3Rpb25zICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5p dGlhbGl6ZV9wc3BhY2UgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXpl X29iamZpbGUgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX2JyZWFr cG9pbnRzICh2b2lkKTsKK3ZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hi cmVha3BvaW50cyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfbGF6 eV9zdHJpbmcgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3BhcmFt ZXRlcnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3RocmVhZCAo dm9pZCk7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5jIGIvZ2Ri L3B5dGhvbi9weXRob24uYwppbmRleCBkZjhlM2Q1Li5kYjIzYmJmIDEwMDY0 NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5jCisrKyBiL2dkYi9weXRob24v cHl0aG9uLmMKQEAgLTEwNTQsNiArMTA1NCwxMSBAQCBnZGJweV9icmVha3Bv aW50X2hhc19weV9jb25kIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJw X29iaikKIAkJICAgICJzY3JpcHRpbmcgaXMgbm90IHN1cHBvcnRlZC4iKSk7 CiB9CiAKK3N0cnVjdCBicmVha3BvaW50ICoKK2dkYnB5X2lzX3N0b3BwZWRf YXRfZmluaXNoX2JwIChicHN0YXQgc3RvcF9icHN0YXQpCit7CisgIHJldHVy biBOVUxMOworfQogI2VuZGlmIC8qIEhBVkVfUFlUSE9OICovCiAKIAwKQEAg LTEyNDMsNiArMTI0OCw3IEBAIEVuYWJsZXMgb3IgZGlzYWJsZXMgcHJpbnRp bmcgb2YgUHl0aG9uIHN0YWNrIHRyYWNlcy4iKSwKICAgZ2RicHlfaW5pdGlh bGl6ZV9wc3BhY2UgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfb2JqZmlsZSAo KTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9icmVha3BvaW50cyAoKTsKKyAgZ2Ri cHlfaW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAoKTsKICAgZ2RicHlf aW5pdGlhbGl6ZV9sYXp5X3N0cmluZyAoKTsKICAgZ2RicHlfaW5pdGlhbGl6 ZV90aHJlYWQgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfaW5mZXJpb3IgKCk7 CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5oIGIvZ2RiL3B5dGhv bi9weXRob24uaAppbmRleCBjZTBlYjM1Li5lMzQxZDc2IDEwMDY0NAotLS0g YS9nZGIvcHl0aG9uL3B5dGhvbi5oCisrKyBiL2dkYi9weXRob24vcHl0aG9u LmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgR0RCX1BZVEhPTl9ICiAK ICNpbmNsdWRlICJ2YWx1ZS5oIgorI2luY2x1ZGUgImJyZWFrcG9pbnQuaCIK IAogc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0OwogCkBAIC00Nyw0ICs0OCw1 IEBAIGludCBnZGJweV9zaG91bGRfc3RvcCAoc3RydWN0IGJyZWFrcG9pbnRf b2JqZWN0ICpicF9vYmopOwogCiBpbnQgZ2RicHlfYnJlYWtwb2ludF9oYXNf cHlfY29uZCAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopOwog CitzdHJ1Y3QgYnJlYWtwb2ludCAqZ2RicHlfaXNfc3RvcHBlZF9hdF9maW5p c2hfYnAgKGJwc3RhdCBzdG9wX2Jwc3RhdCk7CiAjZW5kaWYgLyogR0RCX1BZ VEhPTl9IICovCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktYnJlYWtwb2ludC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktYnJlYWtwb2ludC5leHAKaW5kZXggZTBkZDA4Ny4uMGUzYWRiZCAx MDA2NDQKLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFr cG9pbnQuZXhwCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1i cmVha3BvaW50LmV4cApAQCAtNDQsNyArNDQsOCBAQCBnZGJfcHlfdGVzdF9z aWxlbnRfY21kICJweXRob24gYmxpc3QgPSBnZGIuYnJlYWtwb2ludHMoKSIg IkdldCBCcmVha3BvaW50IExpc3QiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50 IGJsaXN0XFswXF0iICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+ IiAiQ2hlY2sgb2JqIGV4aXN0cyIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQg Ymxpc3RcWzBcXS5sb2NhdGlvbiIgIm1haW4uIiAiQ2hlY2sgYnJlYWtwb2lu dCBsb2NhdGlvbiIKIAotZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9u dW1iZXIgIkJyZWFrIGF0IG11bHRpcGx5LiJdCitzZXQgbXVsdF9saW5lIFtn ZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBhdCBtdWx0aXBseS4iXQorZ2Ri X2JyZWFrcG9pbnQgJHttdWx0X2xpbmV9CiBnZGJfY29udGludWVfdG9fYnJl YWtwb2ludCAiQnJlYWsgYXQgbXVsdGlwbHkuIgogCiAjIENoZWNrIHRoYXQg dGhlIFB5dGhvbiBicmVha3BvaW50IGNvZGUgbm90ZWQgdGhlIGFkZGl0aW9u IG9mIGEKQEAgLTU0LDcgKzU1LDkgQEAgZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dCBsZW4oYmxpc3QpIiAiMiIgIkNoZWNrIGZvciB0d28gYnJlYWtwb2ludHMi CiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0iICI8Z2RiLkJy ZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sgb2JqIGV4aXN0cyIK IGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzBcXS5sb2NhdGlvbiIg Im1haW4uIiAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIKIGdkYl90ZXN0 ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXSIgIjxnZGIuQnJlYWtwb2ludCBv YmplY3QgYXQgJGhleD4iICJDaGVjayBvYmogZXhpc3RzIgotZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBibGlzdFxbMVxdLmxvY2F0aW9uIiAicHktYnJlYWtw b2ludFwuYzo0MSoiICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9uIgorCitn ZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0ubG9jYXRpb24iICJw eS1icmVha3BvaW50XC5jOiR7bXVsdF9saW5lfSoiIFwKKyAgICAgICAgICJD aGVjayBicmVha3BvaW50IGxvY2F0aW9uIgogCiAjIENoZWNrIGhpdCBhbmQg aWdub3JlIGNvdW50cy4gCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0 XFsxXF0uaGl0X2NvdW50IiAiMSIgIkNoZWNrIGJyZWFrcG9pbnQgaGl0IGNv dW50IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50LmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi41YjcwOGUzCi0tLSAvZGV2L251bGwKKysrIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50 LmMKQEAgLTAsMCArMSw5NyBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0 IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIw MTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlICA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSA8c2V0am1wLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2lu dCBpbmNyZWFzZV8xIChpbnQgKmEpCit7CisgICphICs9IDE7CisgIHJldHVy biAtNTsKK30KKwordm9pZCBpbmNyZWFzZSAoaW50ICphKQoreworICBpbmNy ZWFzZV8xIChhKTsKK30KKworaW50Cit0ZXN0XzEgKGludCBpLCBpbnQgaikK K3sKKyAgcmV0dXJuIGkgPT0gajsKK30KKworaW50Cit0ZXN0KGludCBpLCBp bnQgaikKK3sKKyAgcmV0dXJuIHRlc3RfMSAoaSwgaik7Cit9CisKK2ludAor Y2FsbF9sb25nam1wXzEgKGptcF9idWYgKmJ1ZikKK3sKKyAgbG9uZ2ptcCAo KmJ1ZiwgMSk7Cit9CisKK2ludAorY2FsbF9sb25nam1wIChqbXBfYnVmICpi dWYpCit7CisgIGNhbGxfbG9uZ2ptcF8xIChidWYpOworfQorCit2b2lkCit0 ZXN0X2V4ZWNfZXhpdChpbnQgZG9fZXhpdCkKK3sKKyAgaWYgKGRvX2V4aXQp CisgICAgZXhpdCgwKTsKKyAgZWxzZQorICAgIGV4ZWNsICgiL2Jpbi9lY2hv IiwgImVjaG8iLCAiLTEiLCAoY2hhciAqKTApOworfQorCitpbnQgbWFpbiAo aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgam1wX2J1ZiBlbnY7Cisg IGludCBmb28gPSA1OworICBpbnQgYmFyID0gNDI7CisgIGludCBpLCBqOwor CisgIGdldHBpZCgpOworCisgIGkgPSAwOworICAvKiBCcmVhayBhdCBpbmNy ZWFzZS4gKi8KKyAgaW5jcmVhc2UgKCZpKTsKKyAgaW5jcmVhc2UgKCZpKTsK KyAgaW5jcmVhc2UgKCZpKTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkr KykKKyAgICB7CisgICAgICBqICs9IDE7IC8qIENvbmRpdGlvbiBCcmVhay4g Ki8KKyAgICB9CisKKyAgaWYgKHNldGptcCAoZW52KSA9PSAwKSAvKiBsb25n am1wIGNhdWdodCAqLworICAgIHsKKyAgICAgIGNhbGxfbG9uZ2ptcCAoJmVu dik7CisgICAgfQorICBlbHNlCisgICAgaiArPSAxOyAvKiBhZnRlciBsb25n am1wLiAqLworCisgIHRlc3RfZXhlY19leGl0KDEpOworCisgIHJldHVybiBq OyAvKiBCcmVhayBhdCBlbmQuICovCit9CmRpZmYgLS1naXQgYS9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50 LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQz YmVmCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmV4cApAQCAtMCwwICsxLDIzMCBA QAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIG1l Y2hhbmlzbQorIyBleHBvc2luZyB2YWx1ZXMgdG8gUHl0aG9uLgorCitpZiAk dHJhY2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKK30K KworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0IHRlc3RmaWxlICJw eS1maW5pc2gtYnJlYWtwb2ludCIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9 LmMKKworaWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAke3Rlc3RmaWxlfS5l eHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7CisgICAgcmV0dXJuIC0x Cit9CisKK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgW3JlbW90ZV9kb3dubG9h ZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisK KworIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2NyaXB0aW5nIGlzIG5v dCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRob25fdGVzdHNdIH0geyBjb250 aW51ZSB9CisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIG5vcm1h bCBjb25kaXRpb25zCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0K KworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3Qg cnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CitnZGJfdGVzdF9ub19v dXRwdXQgInNldCBjb25maXJtIG9mZiIgImRpc2FibGUgY29uZmlybWF0aW9u IgorZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0 aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5 dGhvbiBzY3JpcHRzIgorZ2RiX2JyZWFrcG9pbnQgImluY3JlYXNlXzEiCitn ZGJfdGVzdCAiY29udGludWUiICJCcmVha3BvaW50IC4qYXQuKiIgImNvbnRp bnVlIHRvIHRoZSBmdW5jdGlvbiB0byBmaW5pc2giCisKKyMgc2V0IEZpbmlz aEJyZWFrcG9pbnQKKworZ2RiX3Rlc3QgInB5dGhvbiBmaW5pc2hicCA9IE15 RmluaXNoQnJlYWtwb2ludCAoZ2RiLnBhcnNlX2FuZF9ldmFsICgnYScpLCBn ZGIuc2VsZWN0ZWRfZnJhbWUgKCkpIiBcCisgICAgICAgICAiVGVtcG9yYXJ5 IGJyZWFrcG9pbnQuKiIgInNldCBGaW5pc2hCcmVha3BvaW50IgorZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBmaW5pc2hicC5yZXR1cm5fdmFsdWUiICJOb25l LioiIFwKKyAgICAgICAgICJjaGVjayByZXR1cm5fdmFsdWUgYXQgaW5pdCIK KworIyBjaGVjayBub3JtYWwgYnAgaGl0CisKK2dkYl90ZXN0ICJjb250aW51 ZSIgIk15RmluaXNoQnJlYWtwb2ludCBzdG9wIHdpdGguKiMwLippbmNyZWFz ZS4qIiBcCisgICAgICAgICAiY2hlY2sgTXlGaW5pc2hCcmVha3BvaW50IGhp dCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAucmV0dXJuX3Zh bHVlIiAiLTUuKiIgImNoZWNrIHJldHVybl92YWx1ZSIKKworZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBmaW5pc2hicC5pc192YWxpZCgpIiAiRmFsc2UuKiJc CisgICAgICAgICAiZW5zdXJlIHRoYXQgZmluaXNoIGJwIGlzIGludmFsaWQg YWZlciBub3JtYWwgaGl0IgorCisjIGNoZWNrIEZpbmlzaEJyZWFrcG9pbnQg aW4gbWFpbiBubyBhbGxvd2VkCisKK2dkYl90ZXN0ICJmaW5pc2giICJtYWlu LioiICJyZXR1cm4gdG8gbWFpbigpIgorZ2RiX3Rlc3QgInB5dGhvbiBNeUZp bmlzaEJyZWFrcG9pbnQgKE5vbmUsIGdkYi5zZWxlY3RlZF9mcmFtZSAoKSki IFwKKyAgICAgICAgICJWYWx1ZUVycm9yOiBcIkZpbmlzaEJyZWFrcG9pbnRc IiBub3QgbWVhbmluZ2Z1bCBpbiB0aGUgb3V0ZXJtb3N0IGZyYW1lLi4qIiBc CisgICAgICAgICAiY2hlY2sgRmluaXNoQlAgbm90IGFsbG93ZWQgaW4gbWFp biIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2l0aCBubyBkZWJ1 ZyBzeW1ib2wgCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKwor Z2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9u IHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhv biBzY3JpcHRzIgorc2V0IGNvbmRfbGluZSBbZ2RiX2dldF9saW5lX251bWJl ciAiQ29uZGl0aW9uIEJyZWFrLiJdCisKK2lmICFbcnVudG8gImdldHBpZCJd IHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gZ2V0cGlkLiIKKyAg ICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAicHl0aG9uIGZpbmlzaEJQID0g U2ltcGxlRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiBc CisgICAgICAgICAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBpbml0IiBcCisg ICAgICAgICAic2V0IGZpbmlzaCBicmVha3BvaW50IgorZ2RiX3Rlc3QgImNv bnRpbnVlIiAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBzdG9wLioiICJjaGVj ayBGaW5pc2hCcmVha3BvaW50IGhpdCIKK2dkYl90ZXN0ICJweXRob24gcHJp bnQgZmluaXNoQlAucmV0dXJuX3ZhbHVlIiAiTm9uZSIgImNoZWNrIHJldHVy biB2YWx1ZSB3aXRob3V0IGRlYnVnIHN5bWJvbCIKKworIworIyBUZXN0IEZp bmlzaEJyZWFrcG9pbnQgaW4gZnVuY3Rpb24gcmV0dXJuZWQgYnkgbG9uZ2pt cCAKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVz dCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0 IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlw dHMiCisKK2lmICFbcnVudG8gY2FsbF9sb25nam1wXzFdIHRoZW4geworICAg IHBlcnJvciAiY291bGRuJ3QgcnVuIHRvIGJyZWFrcG9pbnQgY2FsbF9sb25n am1wIgorICAgIGNvbnRpbnVlCit9CisKK2dkYl90ZXN0ICJweXRob24gZmlu aXNoYnAgPSBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJh bWUoKSkiIFwKKyAgICAgICAgICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGlu aXQiIFwKKyAgICAgICAgICJzZXQgZmluaXNoIGJyZWFrcG9pbnQiIAorZ2Ri X3Rlc3QgImJyZWFrIFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJhZnRlciBsb25n am1wLiJdIiAiQnJlYWtwb2ludC4qIGF0IC4qIiBcCisgICAgICAgICAic2V0 IEJQIGFmdGVyIHRoZSBqdW1wIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2lt cGxlRmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgXAorICAgICAg ICAgImNoZWNrIEZpbmlzaEJQIG91dCBvZiBzY29wZSBub3RpZmljYXRpb24i CitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJwLmlzX3ZhbGlkKCki ICJGYWxzZS4qIlwKKyAgICAgICAgICJlbnN1cmUgdGhhdCBmaW5pc2ggYnAg aXMgaW52YWxpZCBhZmVyIG91dCBvZiBzY29wZSBub3RpZmljYXRpb24iCisK KyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIEJQIGNvbmRpdGlvbiBl dmFsdWF0aW9uIAorIyAoZmluaXNoIGluIGR1bW15IGZyYW1lKQorIworCitj bGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2dkYl90ZXN0ICJzb3VyY2Ug JHJlbW90ZV9weXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQu KiIgXAorICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworCitp ZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4g dG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKyAgICAgICAgIAorZ2RiX3Rl c3QgImJyZWFrICR7Y29uZF9saW5lfSBpZiB0ZXN0XzEoaSw4KSIgIkJyZWFr cG9pbnQgLiogYXQgLioiIFwKKyAgICAgICAgICJzZXQgYSBjb25kaXRpb25h bCBCUCIKK2dkYl90ZXN0ICJweXRob24gVGVzdEJyZWFrcG9pbnQoKSIgIlRl c3RCcmVha3BvaW50IGluaXQiIFwKKyAgICAgICAgICJzZXQgRmluaXNoQlAg aW4gYSBicmVha3BvaW50IGNvbmRpdGlvbiIKK2dkYl90ZXN0ICJjb250aW51 ZSIgXAorICAgICAgICAgIlwiRmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBi ZSBzZXQgb24gYSBkdW1teSBmcmFtZS4qIiBcCisgICAgICAgICAiZG9uJ3Qg YWxsb3cgRmluaXNoQnJlYWtwb2ludCBvbiBkdW1teSBmcmFtZXMiCitnZGJf dGVzdCAicHJpbnQgaSIgIjgiICJjaGVjayBzdG9wcGVkIGxvY2F0aW9uIgor CisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBCUCBjb25kaXRpb24g ZXZhbHVhdGlvbiAKKyMgKGZpbmlzaCBpbiBub3JtYWwgZnJhbWUpCisjCisK K2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJj ZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRl ZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitp ZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4g dG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKworZ2RiX3Rlc3QgImJyZWFr ICR7Y29uZF9saW5lfSBpZiB0ZXN0KGksOCkiIFwKKyAgICAgICAgICJCcmVh a3BvaW50IC4qIGF0IC4qIiAic2V0IGNvbmRpdGlvbmFsIEJQIgorZ2RiX3Rl c3QgInB5dGhvbiBUZXN0QnJlYWtwb2ludCgpIiAiVGVzdEJyZWFrcG9pbnQg aW5pdCIgInNldCBCUCBpbiBjb25kaXRpb24iCisKK2dkYl90ZXN0ICJjb250 aW51ZSIgXAorICAgICAgICAgInRlc3QgZG9uJ3Qgc3RvcCAxLip0ZXN0IGRv bid0IHN0b3AgMi4qdGVzdCBzdG9wLipFcnJvciBpbiB0ZXN0aW5nIGJyZWFr cG9pbnQgY29uZGl0aW9uLipUaGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBz dG9wcGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLioi IFwKKyAgICAgICAgICJzdG9wIGluIGNvbmRpdGlvbiBmdW5jdGlvbiIKKwor Z2RiX3Rlc3QgImNvbnRpbnVlIiAiQ29udGludWluZy4qIiAiZmluaXNoIGNv bmRpdGlvbiBldmFsdWF0aW9uIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiQnJl YWtwb2ludC4qIiAic3RvcCBhdCBjb25kaXRpb25hbCBicmVha3BvaW50Igor Z2RiX3Rlc3QgInByaW50IGkiICI4IiAiY2hlY2sgc3RvcHBlZCBsb2NhdGlv biIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gZXhwbGljaXQg aW5mZXJpb3IgZnVuY3Rpb24gY2FsbAorIworCitjbGVhbl9yZXN0YXJ0ICR7 dGVzdGZpbGV9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25f ZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAg ImltcG9ydCBweXRob24gc2NyaXB0cyIKKworaWYgIVtydW50b19tYWluXSB0 aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJl dHVybiAwCit9CisKKyMgcmV0dXJuIGFkZHJlc3MgaW4gZHVtbXkgZnJhbWUK KworZ2RiX3Rlc3QgInB5dGhvbiBUZXN0RXhwbGljaXRCcmVha3BvaW50KCdp bmNyZWFzZV8xJykiICJCcmVha3BvaW50LiphdC4qIiBcCisgICAgICAgICAi cHJlcGFyZSBUZXN0RXhwbGljaXRCcmVha3BvaW50IgorZ2RiX3Rlc3QgInBy aW50IGluY3JlYXNlXzEoJmkpIiBcCisgICAgICAgICAiXCJGaW5pc2hCcmVh a3BvaW50XCIgY2Fubm90IGJlIHNldCBvbiBhIGR1bW15IGZyYW1lLioiIFwK KyAgICAgICAgICJkb24ndCBhbGxvdyBGaW5pc2hCcmVha3BvaW50IG9uIGR1 bW15IGZyYW1lcyIKKworIyByZXR1cm4gYWRkcmVzcyBpbiBub3JtYWwgZnJh bWUKKworZGVsZXRlX2JyZWFrcG9pbnRzCitnZGJfdGVzdCAicHl0aG9uIFRl c3RFeHBsaWNpdEJyZWFrcG9pbnQoXCJpbmNyZWFzZV8xXCIpIiAiQnJlYWtw b2ludC4qYXQuKiIgXAorICAgICAgICAgInByZXBhcmUgVGVzdEV4cGxpY2l0 QnJlYWtwb2ludCIKK2dkYl90ZXN0ICJwcmludCBpbmNyZWFzZSgmaSkiIFwK KyAgICAgICAgICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQuKlNpbXBs ZUZpbmlzaEJyZWFrcG9pbnQgc3RvcC4qVGhlIHByb2dyYW0gYmVpbmcgZGVi dWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9t IEdEQi4qIiBcCisgICAgICAgICAiRmluaXNoQlAgc3RvcCBhdCBkdXJpbmcg ZXhwbGljaXQgZnVuY3Rpb24gY2FsbCIKKworCisjCisjIFRlc3QgRmluaXNo QnJlYWtwb2ludCB3aGVuIGluZmVyaW9yIGV4aXRzCisjCisKK2lmICFbcnVu dG8gInRlc3RfZXhlY19leGl0Il0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90 IHJ1biB0byB0ZXN0X2V4ZWNfZXhpdC4iCisgICAgcmV0dXJuIDAKK30KKwor Z2RiX3Rlc3QgInB5dGhvbiBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5u ZXdlc3RfZnJhbWUoKSkiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQi ICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4aXQoKSIKK2dkYl90ZXN0ICJj b250aW51ZSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3Bl LioiICJjYXRjaCBvdXQgb2Ygc2NvcGUgYWZ0ZXIgZXhpdCIKKworIworIyBU ZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2hlbiBpbmZlcmlvciBleGVjcworIwor CitpZiAhW3J1bnRvICJ0ZXN0X2V4ZWNfZXhpdCJdIHRoZW4geworICAgIGZh aWwgIkNhbm5vdCBydW4gdG8gdGVzdF9leGVjX2V4aXQuIgorICAgIHJldHVy biAwCit9ICAgICAKKworZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgdmFyIGRv X2V4aXQgPSAwIiAic3dpdGNoIHRvIGV4ZWN2ZSgpIHRlc3QiCitnZGJfdGVz dCAicHl0aG9uIFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9m cmFtZSgpKSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIgInNldCBG aW5pc2hCUCBhZnRlciB0aGUgZXhlYyIKK2dkYl90ZXN0ICJjYXRjaCBleGVj IiAiQ2F0Y2hwb2ludC4qXChleGVjXCkuKiIgImNhdGNoIGV4ZWMiCitnZGJf dGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91dCBv ZiBzY29wZS4qIiAiY2F0Y2ggb3V0IG9mIHNjb3BlIGFmdGVyIGV4ZWMiClwg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5IGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50 LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZjEw YjAKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQucHkKQEAgLTAsMCArMSw4OCBAQAor IyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBweXRob24gRmlu aXNoCisjIEJyZWFrcG9pbnRzLgorCQkKK2NsYXNzIE15RmluaXNoQnJlYWtw b2ludChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisJZGVmIF9faW5pdF9fKHNl bGYsIHZhbCwgZnJhbWUpOgorCQlnZGIuRmluaXNoQnJlYWtwb2ludC5fX2lu aXRfXyAoc2VsZiwgZnJhbWUpCisJCXByaW50ICJNeUZpbmlzaEJyZWFrcG9p bnQgaW5pdCIKKwkJc2VsZi52YWwgPSB2YWwKKwkJCisJZGVmIHN0b3Aoc2Vs Zik6CisJCXByaW50ICJNeUZpbmlzaEJyZWFrcG9pbnQgc3RvcCB3aXRoICVk IiAlIGludChzZWxmLnZhbC5kZXJlZmVyZW5jZSgpKQorCQlnZGIuZXhlY3V0 ZSgid2hlcmUgMSIpCisJCXJldHVybiBUcnVlCisJCisJZGVmIG91dF9vZl9z Y29wZShzZWxmKToKKwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2ludCBvdXQg b2Ygc2NvcGUuLi4iCisKK2NsYXNzIFRlc3RCcmVha3BvaW50KGdkYi5CcmVh a3BvaW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdk Yi5CcmVha3BvaW50Ll9faW5pdF9fKHNlbGYsIHNwZWM9InRlc3RfMSIsIGlu dGVybmFsPTEpCisgICAgICAgIHNlbGYuc2lsZW50ID0gVHJ1ZQorICAgICAg ICBzZWxmLmNvdW50ID0gMAorICAgICAgICBwcmludCAiVGVzdEJyZWFrcG9p bnQgaW5pdCIKKyAgICAgICAgCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAg CXNlbGYuY291bnQgKz0gMQorICAgIAl0cnk6CisgICAgICAgIAlUZXN0Rmlu aXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCksIHNlbGYuY291bnQp CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgIAlw cmludCBlCisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBUZXN0Rmlu aXNoQnJlYWtwb2ludChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisgICAgZGVm IF9faW5pdF9fKHNlbGYsIGZyYW1lLCBjb3VudCk6CisgICAgCXNlbGYuY291 bnQgPSBjb3VudAorICAgICAgICBnZGIuRmluaXNoQnJlYWtwb2ludC5fX2lu aXRfXyhzZWxmLCBmcmFtZSwgaW50ZXJuYWw9MSkKKyAgICAgICAgCisgICAg ICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwcmludCAiLS0+ Iiwgc2VsZi5udW1iZXIKKyAgICAgICAgaWYgKHNlbGYuY291bnQgPT0gMyk6 CisgICAgICAgICAgICBwcmludCAidGVzdCBzdG9wIC4uLiAlZCIgJSBzZWxm LmNvdW50CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNl OgorICAgICAgICAgICAgcHJpbnQgInRlc3QgZG9uJ3Qgc3RvcCAlZCIgJSBz ZWxmLmNvdW50CisgICAgICAgICAgICByZXR1cm4gRmFsc2UgCisgICAgICAg IAorICAgIAorICAgIGRlZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisgICAgICAg IHByaW50ICJ0ZXN0IGRpZG4ndCBmaW5pc2ggLi4uICVkIiAlIHNlbGYuY291 bnQKKworY2xhc3MgVGVzdEV4cGxpY2l0QnJlYWtwb2ludChnZGIuQnJlYWtw b2ludCk6CisJZGVmIHN0b3Aoc2VsZik6CisJCXRyeToKKwkJCVNpbXBsZUZp bmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKQorCQlleGNlcHQg VmFsdWVFcnJvciBhcyBlOgorCQkJcHJpbnQgZQorCQlyZXR1cm4gRmFsc2UK KworY2xhc3MgU2ltcGxlRmluaXNoQnJlYWtwb2ludChnZGIuRmluaXNoQnJl YWtwb2ludCk6CisJZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKwkJZ2Ri LkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1lKQorCQkK KwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIKKwkJCisJ ZGVmIHN0b3Aoc2VsZik6CisJCXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3Bv aW50IHN0b3AiIAorCQlyZXR1cm4gVHJ1ZQorCQorCWRlZiBvdXRfb2Zfc2Nv cGUoc2VsZik6CisJCXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91 dCBvZiBzY29wZS4uLiIKKworcHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1wb3J0 ZWRkIgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50Mi5jYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlZWEwNgotLS0gL2Rldi9udWxsCisr KyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtw b2ludDIuY2MKQEAgLTAsMCArMSw1OSBAQAorLyogVGhpcyB0ZXN0Y2FzZSBp cyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJp Z2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlICA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisKKyNpbmNsdWRlIDxpb3N0 cmVhbT4KKwordm9pZAordGhyb3dfZXhjZXB0aW9uXzEgKGludCBlKQorewor ICB0aHJvdyBuZXcgaW50IChlKTsKK30KKwordm9pZAordGhyb3dfZXhjZXB0 aW9uIChpbnQgZSkKK3sKKyAgdGhyb3dfZXhjZXB0aW9uXzEgKGUpOworfQor CitpbnQKK21haW4gKHZvaWQpCit7CisgIGludCBpOworICB0cnkKKyAgICB7 CisgICAgICB0aHJvd19leGNlcHRpb25fMSAoMTApOworICAgIH0KKyAgY2F0 Y2ggKGNvbnN0IGludCAqZSkKKyAgICB7CisgICAgICAgIHN0ZDo6Y2VyciA8 PCAiRXhjZXB0aW9uICMiIDw8ICplIDw8IHN0ZDo6ZW5kbDsKKyAgICB9Cisg IGkgKz0gMTsgLyogQnJlYWsgYWZ0ZXIgZXhjZXB0aW9uIDEuICAqLworCisg IHRyeQorICAgIHsKKyAgICAgIHRocm93X2V4Y2VwdGlvbiAoMTApOworICAg IH0KKyAgY2F0Y2ggKGNvbnN0IGludCAqZSkKKyAgICB7CisgICAgICAgIHN0 ZDo6Y2VyciA8PCAiRXhjZXB0aW9uICMiIDw8ICplIDw8IHN0ZDo6ZW5kbDsK KyAgICB9CisgIGkgKz0gMTsgLyogQnJlYWsgYWZ0ZXIgZXhjZXB0aW9uIDIu ICAqLworCisgIHJldHVybiBpOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQy LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU3 OThjCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAKQEAgLTAsMCArMSw2NSBA QAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIG1l Y2hhbmlzbQorIyBleHBvc2luZyB2YWx1ZXMgdG8gUHl0aG9uLgorCitpZiAk dHJhY2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKK30K KworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0IHRlc3RmaWxlICJw eS1maW5pc2gtYnJlYWtwb2ludDIiCitzZXQgc3JjZmlsZSAke3Rlc3RmaWxl fS5jYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3Rm aWxlfQorc2V0IHB5ZmlsZSAgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3Rm aWxlfS5weQorCisjIFN0YXJ0IHdpdGggYSBmcmVzaCBnZGIuCitnZGJfZXhp dAorZ2RiX3N0YXJ0CitnZGJfcmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRz dWJkaXIKK2dkYl9sb2FkICR7YmluZmlsZX0KKworaWYgeyBbZ2RiX2NvbXBp bGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7YmluZmls ZX0iIGV4ZWN1dGFibGUge2RlYnVnIGMrK31dICE9ICIiIH0geworICAgIHVu dGVzdGVkICJDb3VsZG4ndCBjb21waWxlICR7c3JjZmlsZX0iCisgICAgcmV0 dXJuIC0xCit9CisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFp bCAiQ2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCisj CisjIENoZWNrIEZpbmlzaEJyZWFrcG9pbnRzIGFnYWluc3QgQysrIGV4Y2Vw dGlvbnMKKyMKKworZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1i ZXIgIkJyZWFrIGFmdGVyIGV4Y2VwdGlvbiAyIl0KKworZ2RiX3Rlc3QgInNv dXJjZSAkcHlmaWxlIiAiLipQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwK KyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisgICAgICAgICAK K2dkYl9icmVha3BvaW50ICJ0aHJvd19leGNlcHRpb25fMSIKK2dkYl90ZXN0 ICJjb250aW51ZSIgIkJyZWFrcG9pbnQgLip0aHJvd19leGNlcHRpb25fMS4q IiAicnVuIHRvIGV4Y2VwdGlvbiAxIgorCitnZGJfdGVzdCAicHl0aG9uIHBy aW50IGxlbihnZGIuYnJlYWtwb2ludHMoKSkiICIzIiAiY2hlY2sgQlAgY291 bnQiCitnZGJfdGVzdCAicHl0aG9uIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9p bnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgImluaXQgRXhjZXB0aW9uRmluaXNo QnJlYWtwb2ludCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhjZXB0aW9u IgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiLipzdG9wcGVkIGF0IEV4Y2VwdGlv bkZpbmlzaEJyZWFrcG9pbnQuKiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQg aW4gY2F0Y2goKSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGdkYi5i cmVha3BvaW50cygpKSIgIjMiICJjaGVjayBmaW5pc2ggQlAgcmVtb3ZhbCIK KworZ2RiX3Rlc3QgImNvbnRpbnVlIiAiLipCcmVha3BvaW50LiogdGhyb3df ZXhjZXB0aW9uXzEuKiIgImNvbnRpbnVlIHRvIHNlY29uZCBleGNlcHRpb24i CitnZGJfdGVzdCAicHl0aG9uIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQo Z2RiLm5ld2VzdF9mcmFtZSgpKSIgImluaXQgRXhjZXB0aW9uRmluaXNoQnJl YWtwb2ludCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhjZXB0aW9uIgor Z2RiX3Rlc3QgImNvbnRpbnVlIiAiLipleGNlcHRpb24gZGlkIG5vdCBmaW5p c2guKiIgIkZpbmlzaEJyZWFrcG9pbnQgd2l0aCBleGNlcHRpb24gdGhyb3du IG5vdCBjYXVnaHQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5IGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5weQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE0Y2YxCi0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50Mi5weQpAQCAtMCwwICsxLDM0IEBACisjIENvcHlyaWdo dCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg R0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHB5dGhvbiBGaW5pc2gKKyMgQnJl YWtwb2ludHMuCisKK2NsYXNzIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQo Z2RiLkZpbmlzaEJyZWFrcG9pbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm LCBmcmFtZSk6CisgICAgICAgIGdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5p dF9fKHNlbGYsIGZyYW1lLCBpbnRlcm5hbD0xKQorICAgICAgICBzZWxmLnNp bGVudCA9IFRydWU7CisgICAgICAgIHByaW50ICJpbml0IEV4Y2VwdGlvbkZp bmlzaEJyZWFrcG9pbnQiCisgICAgICAgIAorICAgIGRlZiBzdG9wKHNlbGYp OgorICAgICAgICBwcmludCAic3RvcHBlZCBhdCBFeGNlcHRpb25GaW5pc2hC cmVha3BvaW50IgorICAgICAgICBnZGIucG9zdF9ldmVudChzZWxmLmRlbGV0 ZSkKKyAgICAgICAgcmV0dXJuIFRydWUgCisgICAgCisgICAgZGVmIG91dF9v Zl9zY29wZShzZWxmKToKKyAgICAgICAgcHJpbnQgImV4Y2VwdGlvbiBkaWQg bm90IGZpbmlzaCAuLi4iCisKKworcHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1w b3J0ZWQiCi0tIAoxLjcuNi40Cgo= --f46d043c808c9615a604b007db00--