From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28308 invoked by alias); 19 Jan 2009 07:24:59 -0000 Received: (qmail 28295 invoked by uid 22791); 19 Jan 2009 07:24:51 -0000 X-SWARE-Spam-Status: No, hits=1.4 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_17,J_CHICKENPOX_53,J_CHICKENPOX_63,J_CHICKENPOX_83,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 19 Jan 2009 07:24:40 +0000 Received: from spaceape24.eur.corp.google.com (spaceape24.eur.corp.google.com [172.28.16.76]) by smtp-out.google.com with ESMTP id n0J7OaWa019631 for ; Mon, 19 Jan 2009 07:24:36 GMT Received: from rv-out-0506.google.com (rvbg37.prod.google.com [10.140.83.37]) by spaceape24.eur.corp.google.com with ESMTP id n0J7OWNc019492 for ; Sun, 18 Jan 2009 23:24:33 -0800 Received: by rv-out-0506.google.com with SMTP id g37so2562735rvb.23 for ; Sun, 18 Jan 2009 23:24:31 -0800 (PST) MIME-Version: 1.0 Received: by 10.141.146.4 with SMTP id y4mr2690899rvn.88.1232349871762; Sun, 18 Jan 2009 23:24:31 -0800 (PST) In-Reply-To: <200901141504.n0EF45Db010461@d12av02.megacenter.de.ibm.com> References: <20090107065222.1E8B81C7A92@localhost> <200901141504.n0EF45Db010461@d12av02.megacenter.de.ibm.com> Date: Mon, 19 Jan 2009 07:24:00 -0000 Message-ID: Subject: Re: [RFA] dummy frame handling cleanup, plus inferior fun call signal handling improvement From: Doug Evans To: Ulrich Weigand Cc: gdb-patches@sourceware.org, pedro@codesourcery.com Content-Type: multipart/mixed; boundary=000e0cd1461458728b0460d0d096 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: 2009-01/txt/msg00416.txt.bz2 --000e0cd1461458728b0460d0d096 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 8562 On Wed, Jan 14, 2009 at 7:04 AM, Ulrich Weigand wrote: > Doug Evans wrote: > >> Ulrich suggested making the error messages more consistent. >> I like it but after having gone through the exercise I have a question: >> There are two MI testcases that check the precise wording, do we have to worry >> about frontends that check the wording? >> Maybe changes to the wording can be defered to a later patch? > > I don't think frontends are supposed to check the exact wording. > (After all, the text may be translated ...) > >> 2009-01-06 Doug Evans >> >> * dummy-frame.c (dummy_frame): Replace regcache member with >> caller_state. >> (dummy_frame_push): Replace caller_regcache arg with caller_state. >> Return pointer to created dummy frame. All callers updated. >> (remove_dummy_frame,do_dummy_frame_cleanup,pop_dummy_frame_from_ptr, >> lookup_dummy,lookup_dummy_id,dummy_frame_discard): New fns. >> (dummy_frame_pop): Rewrite. Verify requested frame is in the >> dummy frame stack. Restore program state. >> (cleanup_dummy_frames): Rewrite. >> (dummy_frame_sniffer): Update. Make static. >> * dummy-frame.h (regcache): Delete forward decl. >> (inferior_thread_state,dummy_frame): Add forward decls. >> (dummy_frame_push): Update prototype. >> (dummy_frame_discard): Declare. >> * frame.c (frame_pop): dummy_frame_pop now does all the work for >> DUMMY_FRAMEs. >> * infcall.c (breakpoint_auto_delete_contents): Delete. >> (get_function_name,run_inferior_call): New fns. >> (call_function_by_hand): Simplify by moving some code to >> get_function_name, run_inferior_call. Inferior function call wrapped >> in TRY_CATCH so there's less need for cleanups and all exits from >> proceed are handled similarily. Detect program exit. >> Detect program stopping in a different thread. >> Make error messages more consistent. >> * inferior.h (inferior_thread_state): Declare (opaque type). >> (save_inferior_thread_state,restore_inferior_thread_state, >> make_cleanup_restore_inferior_thread_state, >> discard_inferior_thread_state, get_inferior_thread_state_regcache): >> Declare. >> (save_inferior_status): Update prototype. >> * infrun.c: #include "dummy-frame.h" >> (normal_stop): When stopped for the completion of an inferior function >> call, verify the expected stack frame kind. >> (inferior_thread_state): New struct. >> (save_inferior_thread_state,restore_inferior_thread_state, >> do_restore_inferior_thread_state_cleanup, >> make_cleanup_restore_inferior_thread_state, >> discard_inferior_thread_state, >> get_inferior_thread_state_regcache): New functions. >> (inferior_status): Move stop_signal, stop_pc, registers to >> inferior_thread_state. Remove restore_stack_info. >> (save_inferior_status): Remove arg restore_stack_info. >> All callers updated. Remove saving of state now saved by >> save_inferior_thread_state. >> (restore_inferior_status): Remove restoration of state now done by >> restore_inferior_thread_state. >> (discard_inferior_status): Remove freeing of registers, now done by >> discard_inferior_thread_state. >> >> * gdb.base/break.exp: Update expected gdb output. >> * gdb.base/sepdebug.exp: Ditto. >> * gdb.mi/mi-syn-frame.exp: Ditto. >> * gdb.mi/mi2-syn-frame.exp: Ditto. >> >> * gdb.base/call-signal-resume.exp: New file. >> * gdb.base/call-signals.c: New file. >> * gdb.base/unwindonsignal.exp: New file. >> * gdb.base/unwindonsignal.c: New file. >> * gdb.threads/interrupted-hand-call.exp: New file. >> * gdb.threads/interrupted-hand-call.c: New file. >> * gdb.threads/thread-unwindonsignal.exp: New file. > > This looks all very good to me, thanks! > > Just a couple of minor things I noticed: > > >> +static void >> +cleanup_dummy_frames (struct target_ops *target, int from_tty) >> +{ >> + while (dummy_frame_stack != NULL) >> + { >> + remove_dummy_frame (&dummy_frame_stack); >> + } > > GNU coding style would be to omit the braces around a single > statement. Ah. >> +/* Discard DUMMY and remove it from the dummy frame stack. >> + If the frame isn't found, flag an internal error. */ >> + >> +extern void dummy_frame_discard (struct dummy_frame *dummy); > > It would seem more in sync with the rest of the interfaces > if this routine were to take a dummy_id instead of a struct > dummy_frame pointer. That would allow us to keep that struct > fully private to the implementation ... > > Also, it seems that you only ever call that function if the > inferior exited while in an inferior call. Does it matter > to discard the dummy frame in that case? After all, the > program conceptually still would be in the inferior call, > if it were running ... Once the program is restarted, the > stale dummy frames will be garbage-collected anyway. I've applied these suggestions to the appended patch. >> + volatile struct gdb_exception e; > > Does this need to be volatile in this routine? Leftover turd. Deleted. >> + const char *name; >> + /* For "at ". */ >> + char name_buf[50]; > > GNU coding style frowns on "magic" array sizes like that ... Fixed. >> +struct inferior_thread_state * >> +save_inferior_thread_state (void) >> +{ >> + struct inferior_thread_state *inf_state = XMALLOC (struct inferior_thread_state); >> + struct thread_info *tp = inferior_thread (); >> + struct inferior *inf = current_inferior (); > > It seems "inf" is never needed here (and some of the > other new routines). Fixed. Ok to check in? 2009-01-18 Doug Evans * dummy-frame.c (dummy_frame): Replace regcache member with caller_state. (dummy_frame_push): Replace caller_regcache arg with caller_state. All callers updated. (remove_dummy_frame,pop_dummy_frame,lookup_dummy_frame): New fns. (dummy_frame_pop): Rewrite. Verify requested frame is in the dummy frame stack. Restore program state. (cleanup_dummy_frames): Rewrite. (dummy_frame_sniffer): Update. Make static. * dummy-frame.h (regcache,frame_info): Delete forward decls. (inferior_thread_state): New forward decl. (dummy_frame_push): Update prototype. * frame.c (frame_pop): dummy_frame_pop now does all the work for DUMMY_FRAMEs. * infcall.c (breakpoint_auto_delete_contents): Delete. (get_function_name,run_inferior_call): New fns. (call_function_by_hand): Simplify by moving some code to get_function_name, run_inferior_call. Inferior function call wrapped in TRY_CATCH so there's less need for cleanups and all exits from proceed are handled similarily. Detect program exit. Detect program stopping in a different thread. Make error messages more consistent. * inferior.h (inferior_thread_state): Declare (opaque type). (save_inferior_thread_state,restore_inferior_thread_state, make_cleanup_restore_inferior_thread_state, discard_inferior_thread_state, get_inferior_thread_state_regcache): Declare. (save_inferior_status): Update prototype. * infrun.c: (normal_stop): When stopped for the completion of an inferior function call, verify the expected stack frame kind. (inferior_thread_state): New struct. (save_inferior_thread_state,restore_inferior_thread_state, do_restore_inferior_thread_state_cleanup, make_cleanup_restore_inferior_thread_state, discard_inferior_thread_state, get_inferior_thread_state_regcache): New functions. (inferior_status): Move stop_signal, stop_pc, registers to inferior_thread_state. Remove restore_stack_info. (save_inferior_status): Remove arg restore_stack_info. All callers updated. Remove saving of state now saved by save_inferior_thread_state. (restore_inferior_status): Remove restoration of state now done by restore_inferior_thread_state. (discard_inferior_status): Remove freeing of registers, now done by discard_inferior_thread_state. * gdb.base/break.exp: Update expected gdb output. * gdb.base/sepdebug.exp: Ditto. * gdb.mi/mi-syn-frame.exp: Ditto. * gdb.mi/mi2-syn-frame.exp: Ditto. * gdb.base/call-signal-resume.exp: New file. * gdb.base/call-signals.c: New file. * gdb.base/unwindonsignal.exp: New file. * gdb.base/unwindonsignal.c: New file. * gdb.threads/interrupted-hand-call.exp: New file. * gdb.threads/interrupted-hand-call.c: New file. * gdb.threads/thread-unwindonsignal.exp: New file. --000e0cd1461458728b0460d0d096 Content-Type: text/plain; charset=US-ASCII; name="gdb-090118-infcall-6.patch.txt" Content-Disposition: attachment; filename="gdb-090118-infcall-6.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fq4t972j0 Content-length: 102175 MjAwOS0wMS0xOCAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog ZHVtbXktZnJhbWUuYyAoZHVtbXlfZnJhbWUpOiBSZXBsYWNlIHJlZ2NhY2hl IG1lbWJlciB3aXRoCgljYWxsZXJfc3RhdGUuCgkoZHVtbXlfZnJhbWVfcHVz aCk6IFJlcGxhY2UgY2FsbGVyX3JlZ2NhY2hlIGFyZyB3aXRoIGNhbGxlcl9z dGF0ZS4KCUFsbCBjYWxsZXJzIHVwZGF0ZWQuCgkocmVtb3ZlX2R1bW15X2Zy YW1lLHBvcF9kdW1teV9mcmFtZSxsb29rdXBfZHVtbXlfZnJhbWUpOiBOZXcg Zm5zLgoJKGR1bW15X2ZyYW1lX3BvcCk6IFJld3JpdGUuICBWZXJpZnkgcmVx dWVzdGVkIGZyYW1lIGlzIGluIHRoZQoJZHVtbXkgZnJhbWUgc3RhY2suICBS ZXN0b3JlIHByb2dyYW0gc3RhdGUuCgkoY2xlYW51cF9kdW1teV9mcmFtZXMp OiBSZXdyaXRlLgoJKGR1bW15X2ZyYW1lX3NuaWZmZXIpOiBVcGRhdGUuICBN YWtlIHN0YXRpYy4KCSogZHVtbXktZnJhbWUuaCAocmVnY2FjaGUsZnJhbWVf aW5mbyk6IERlbGV0ZSBmb3J3YXJkIGRlY2xzLgoJKGluZmVyaW9yX3RocmVh ZF9zdGF0ZSk6IE5ldyBmb3J3YXJkIGRlY2wuCgkoZHVtbXlfZnJhbWVfcHVz aCk6IFVwZGF0ZSBwcm90b3R5cGUuCgkqIGZyYW1lLmMgKGZyYW1lX3BvcCk6 IGR1bW15X2ZyYW1lX3BvcCBub3cgZG9lcyBhbGwgdGhlIHdvcmsgZm9yCglE VU1NWV9GUkFNRXMuCgkqIGluZmNhbGwuYyAoYnJlYWtwb2ludF9hdXRvX2Rl bGV0ZV9jb250ZW50cyk6IERlbGV0ZS4KCShnZXRfZnVuY3Rpb25fbmFtZSxy dW5faW5mZXJpb3JfY2FsbCk6IE5ldyBmbnMuCgkoY2FsbF9mdW5jdGlvbl9i eV9oYW5kKTogU2ltcGxpZnkgYnkgbW92aW5nIHNvbWUgY29kZSB0bwoJZ2V0 X2Z1bmN0aW9uX25hbWUsIHJ1bl9pbmZlcmlvcl9jYWxsLiAgSW5mZXJpb3Ig ZnVuY3Rpb24gY2FsbCB3cmFwcGVkCglpbiBUUllfQ0FUQ0ggc28gdGhlcmUn cyBsZXNzIG5lZWQgZm9yIGNsZWFudXBzIGFuZCBhbGwgZXhpdHMgZnJvbQoJ cHJvY2VlZCBhcmUgaGFuZGxlZCBzaW1pbGFyaWx5LiAgRGV0ZWN0IHByb2dy YW0gZXhpdC4KCURldGVjdCBwcm9ncmFtIHN0b3BwaW5nIGluIGEgZGlmZmVy ZW50IHRocmVhZC4KCU1ha2UgZXJyb3IgbWVzc2FnZXMgbW9yZSBjb25zaXN0 ZW50LgoJKiBpbmZlcmlvci5oIChpbmZlcmlvcl90aHJlYWRfc3RhdGUpOiBE ZWNsYXJlIChvcGFxdWUgdHlwZSkuCgkoc2F2ZV9pbmZlcmlvcl90aHJlYWRf c3RhdGUscmVzdG9yZV9pbmZlcmlvcl90aHJlYWRfc3RhdGUsCgltYWtlX2Ns ZWFudXBfcmVzdG9yZV9pbmZlcmlvcl90aHJlYWRfc3RhdGUsCglkaXNjYXJk X2luZmVyaW9yX3RocmVhZF9zdGF0ZSwgZ2V0X2luZmVyaW9yX3RocmVhZF9z dGF0ZV9yZWdjYWNoZSk6CglEZWNsYXJlLgoJKHNhdmVfaW5mZXJpb3Jfc3Rh dHVzKTogVXBkYXRlIHByb3RvdHlwZS4KCSogaW5mcnVuLmM6IChub3JtYWxf c3RvcCk6IFdoZW4gc3RvcHBlZCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYW4K CWluZmVyaW9yIGZ1bmN0aW9uIGNhbGwsIHZlcmlmeSB0aGUgZXhwZWN0ZWQg c3RhY2sgZnJhbWUga2luZC4KCShpbmZlcmlvcl90aHJlYWRfc3RhdGUpOiBO ZXcgc3RydWN0LgoJKHNhdmVfaW5mZXJpb3JfdGhyZWFkX3N0YXRlLHJlc3Rv cmVfaW5mZXJpb3JfdGhyZWFkX3N0YXRlLAoJZG9fcmVzdG9yZV9pbmZlcmlv cl90aHJlYWRfc3RhdGVfY2xlYW51cCwKCW1ha2VfY2xlYW51cF9yZXN0b3Jl X2luZmVyaW9yX3RocmVhZF9zdGF0ZSwKCWRpc2NhcmRfaW5mZXJpb3JfdGhy ZWFkX3N0YXRlLAoJZ2V0X2luZmVyaW9yX3RocmVhZF9zdGF0ZV9yZWdjYWNo ZSk6IE5ldyBmdW5jdGlvbnMuCgkoaW5mZXJpb3Jfc3RhdHVzKTogTW92ZSBz dG9wX3NpZ25hbCwgc3RvcF9wYywgcmVnaXN0ZXJzIHRvCglpbmZlcmlvcl90 aHJlYWRfc3RhdGUuICBSZW1vdmUgcmVzdG9yZV9zdGFja19pbmZvLgoJKHNh dmVfaW5mZXJpb3Jfc3RhdHVzKTogUmVtb3ZlIGFyZyByZXN0b3JlX3N0YWNr X2luZm8uCglBbGwgY2FsbGVycyB1cGRhdGVkLiAgUmVtb3ZlIHNhdmluZyBv ZiBzdGF0ZSBub3cgc2F2ZWQgYnkKCXNhdmVfaW5mZXJpb3JfdGhyZWFkX3N0 YXRlLgoJKHJlc3RvcmVfaW5mZXJpb3Jfc3RhdHVzKTogUmVtb3ZlIHJlc3Rv cmF0aW9uIG9mIHN0YXRlIG5vdyBkb25lIGJ5CglyZXN0b3JlX2luZmVyaW9y X3RocmVhZF9zdGF0ZS4KCShkaXNjYXJkX2luZmVyaW9yX3N0YXR1cyk6IFJl bW92ZSBmcmVlaW5nIG9mIHJlZ2lzdGVycywgbm93IGRvbmUgYnkKCWRpc2Nh cmRfaW5mZXJpb3JfdGhyZWFkX3N0YXRlLgoKCSogZ2RiLmJhc2UvYnJlYWsu ZXhwOiBVcGRhdGUgZXhwZWN0ZWQgZ2RiIG91dHB1dC4KCSogZ2RiLmJhc2Uv c2VwZGVidWcuZXhwOiBEaXR0by4KCSogZ2RiLm1pL21pLXN5bi1mcmFtZS5l eHA6IERpdHRvLgoJKiBnZGIubWkvbWkyLXN5bi1mcmFtZS5leHA6IERpdHRv LgoKCSogZ2RiLmJhc2UvY2FsbC1zaWduYWwtcmVzdW1lLmV4cDogTmV3IGZp bGUuCgkqIGdkYi5iYXNlL2NhbGwtc2lnbmFscy5jOiBOZXcgZmlsZS4KCSog Z2RiLmJhc2UvdW53aW5kb25zaWduYWwuZXhwOiBOZXcgZmlsZS4KCSogZ2Ri LmJhc2UvdW53aW5kb25zaWduYWwuYzogTmV3IGZpbGUuCgkqIGdkYi50aHJl YWRzL2ludGVycnVwdGVkLWhhbmQtY2FsbC5leHA6IE5ldyBmaWxlLgoJKiBn ZGIudGhyZWFkcy9pbnRlcnJ1cHRlZC1oYW5kLWNhbGwuYzogTmV3IGZpbGUu CgkqIGdkYi50aHJlYWRzL3RocmVhZC11bndpbmRvbnNpZ25hbC5leHA6IE5l dyBmaWxlLgoKSW5kZXg6IGR1bW15LWZyYW1lLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9kdW1teS1mcmFt ZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU0CmRpZmYgLXUgLXAgLXUg LXAgLXIxLjU0IGR1bW15LWZyYW1lLmMKLS0tIGR1bW15LWZyYW1lLmMJMyBK YW4gMjAwOSAwNTo1Nzo1MSAtMDAwMAkxLjU0CisrKyBkdW1teS1mcmFtZS5j CTE5IEphbiAyMDA5IDAxOjA4OjQ2IC0wMDAwCkBAIC00Miw4ICs0Miw4IEBA IHN0cnVjdCBkdW1teV9mcmFtZQogICAvKiBUaGlzIGZyYW1lJ3MgSUQuICBN dXN0IG1hdGNoIHRoZSB2YWx1ZSByZXR1cm5lZCBieQogICAgICBnZGJhcmNo X2R1bW15X2lkLiAgKi8KICAgc3RydWN0IGZyYW1lX2lkIGlkOwotICAvKiBU aGUgY2FsbGVyJ3MgcmVnY2FjaGUuICAqLwotICBzdHJ1Y3QgcmVnY2FjaGUg KnJlZ2NhY2hlOworICAvKiBUaGUgY2FsbGVyJ3Mgc3RhdGUgcHJpb3IgdG8g dGhlIGNhbGwuICAqLworICBzdHJ1Y3QgaW5mZXJpb3JfdGhyZWFkX3N0YXRl ICpjYWxsZXJfc3RhdGU7CiB9OwogCiBzdGF0aWMgc3RydWN0IGR1bW15X2Zy YW1lICpkdW1teV9mcmFtZV9zdGFjayA9IE5VTEw7CkBAIC04MSw2MSArODEs MTAxIEBAIGRlcHJlY2F0ZWRfcGNfaW5fY2FsbF9kdW1teSAoQ09SRV9BRERS IHAKICAgcmV0dXJuIDA7CiB9CiAKLS8qIFB1c2ggdGhlIGNhbGxlcidzIHN0 YXRlLCBhbG9uZyB3aXRoIHRoZSBkdW1teSBmcmFtZSBpbmZvLCBvbnRvIGEK Ky8qIFB1c2ggdGhlIGNhbGxlcidzIHN0YXRlLCBhbG9uZyB3aXRoIHRoZSBk dW1teSBmcmFtZSBpbmZvLCBvbnRvIHRoZQogICAgZHVtbXktZnJhbWUgc3Rh Y2suICAqLwogCiB2b2lkCi1kdW1teV9mcmFtZV9wdXNoIChzdHJ1Y3QgcmVn Y2FjaGUgKmNhbGxlcl9yZWdjYWNoZSwKK2R1bW15X2ZyYW1lX3B1c2ggKHN0 cnVjdCBpbmZlcmlvcl90aHJlYWRfc3RhdGUgKmNhbGxlcl9zdGF0ZSwKIAkJ ICBjb25zdCBzdHJ1Y3QgZnJhbWVfaWQgKmR1bW15X2lkKQogewogICBzdHJ1 Y3QgZHVtbXlfZnJhbWUgKmR1bW15X2ZyYW1lOwogCiAgIGR1bW15X2ZyYW1l ID0gWFpBTExPQyAoc3RydWN0IGR1bW15X2ZyYW1lKTsKLSAgZHVtbXlfZnJh bWUtPnJlZ2NhY2hlID0gY2FsbGVyX3JlZ2NhY2hlOworICBkdW1teV9mcmFt ZS0+Y2FsbGVyX3N0YXRlID0gY2FsbGVyX3N0YXRlOwogICBkdW1teV9mcmFt ZS0+aWQgPSAoKmR1bW15X2lkKTsKICAgZHVtbXlfZnJhbWUtPm5leHQgPSBk dW1teV9mcmFtZV9zdGFjazsKICAgZHVtbXlfZnJhbWVfc3RhY2sgPSBkdW1t eV9mcmFtZTsKIH0KIAotLyogUG9wIHRoZSBkdW1teSBmcmFtZSB3aXRoIElE IGR1bW15X2lkIGZyb20gdGhlIGR1bW15LWZyYW1lIHN0YWNrLiAgKi8KKy8q IFJlbW92ZSAqRFVNTVlfUFRSIGZyb20gdGhlIGR1bW15IGZyYW1lIHN0YWNr LiAgKi8KIAotdm9pZAotZHVtbXlfZnJhbWVfcG9wIChzdHJ1Y3QgZnJhbWVf aWQgZHVtbXlfaWQpCitzdGF0aWMgdm9pZAorcmVtb3ZlX2R1bW15X2ZyYW1l IChzdHJ1Y3QgZHVtbXlfZnJhbWUgKipkdW1teV9wdHIpCiB7Ci0gIHN0cnVj dCBkdW1teV9mcmFtZSAqKmR1bW15X3B0cjsKKyAgc3RydWN0IGR1bW15X2Zy YW1lICpkdW1teSA9ICpkdW1teV9wdHI7CiAKLSAgZm9yIChkdW1teV9wdHIg PSAmZHVtbXlfZnJhbWVfc3RhY2s7Ci0gICAgICAgKCpkdW1teV9wdHIpICE9 IE5VTEw7Ci0gICAgICAgZHVtbXlfcHRyID0gJigqZHVtbXlfcHRyKS0+bmV4 dCkKLSAgICB7Ci0gICAgICBzdHJ1Y3QgZHVtbXlfZnJhbWUgKmR1bW15ID0g KmR1bW15X3B0cjsKLSAgICAgIGlmIChmcmFtZV9pZF9lcSAoZHVtbXktPmlk LCBkdW1teV9pZCkpCi0JewotCSAgKmR1bW15X3B0ciA9IGR1bW15LT5uZXh0 OwotCSAgcmVnY2FjaGVfeGZyZWUgKGR1bW15LT5yZWdjYWNoZSk7Ci0JICB4 ZnJlZSAoZHVtbXkpOwotCSAgYnJlYWs7Ci0JfQotICAgIH0KKyAgKmR1bW15 X3B0ciA9IGR1bW15LT5uZXh0OworICBkaXNjYXJkX2luZmVyaW9yX3RocmVh ZF9zdGF0ZSAoZHVtbXktPmNhbGxlcl9zdGF0ZSk7CisgIHhmcmVlIChkdW1t eSk7CiB9CiAKLS8qIFRoZXJlIG1heSBiZSBzdGFsZSBkdW1teSBmcmFtZXMs IHBlcmhhcHMgbGVmdCBvdmVyIGZyb20gd2hlbiBhIGxvbmdqdW1wIHRvb2sg dXMKLSAgIG91dCBvZiBhIGZ1bmN0aW9uIHRoYXQgd2FzIGNhbGxlZCBieSB0 aGUgZGVidWdnZXIuICBDbGVhbiB0aGVtIHVwIGF0IGxlYXN0IG9uY2UKLSAg IHdoZW5ldmVyIHdlIHN0YXJ0IGEgbmV3IGluZmVyaW9yLiAgKi8KKy8qIFBv cCAqRFVNTVlfUFRSLCByZXN0b3JpbmcgcHJvZ3JhbSBzdGF0ZSB0byB0aGF0 IGJlZm9yZSB0aGUKKyAgIGZyYW1lIHdhcyBjcmVhdGVkLiAgKi8KIAogc3Rh dGljIHZvaWQKLWNsZWFudXBfZHVtbXlfZnJhbWVzIChzdHJ1Y3QgdGFyZ2V0 X29wcyAqdGFyZ2V0LCBpbnQgZnJvbV90dHkpCitwb3BfZHVtbXlfZnJhbWUg KHN0cnVjdCBkdW1teV9mcmFtZSAqKmR1bW15X3B0cikKK3sKKyAgc3RydWN0 IGR1bW15X2ZyYW1lICpkdW1teTsKKworICByZXN0b3JlX2luZmVyaW9yX3Ro cmVhZF9zdGF0ZSAoKCpkdW1teV9wdHIpLT5jYWxsZXJfc3RhdGUpOworCisg IC8qIHJlc3RvcmVfaW5mZXJpb3Jfc3RhdHVzIGZyZWVzIGluZl9zdGF0ZSwK KyAgICAgYWxsIHRoYXQgcmVtYWlucyBpcyB0byBwb3AgKmR1bW15X3B0ciAq LworICBkdW1teSA9ICpkdW1teV9wdHI7CisgICpkdW1teV9wdHIgPSBkdW1t eS0+bmV4dDsKKyAgeGZyZWUgKGR1bW15KTsKKworICAvKiBXZSd2ZSBtYWRl IHJpZ2h0IG1lc3Mgb2YgR0RCJ3MgbG9jYWwgc3RhdGUsIGp1c3QgZGlzY2Fy ZAorICAgICBldmVyeXRoaW5nLiAgKi8KKyAgcmVpbml0X2ZyYW1lX2NhY2hl ICgpOworfQorCisvKiBMb29rIHVwIERVTU1ZX0lELgorICAgUmV0dXJuIE5V TEwgaWYgbm90IGZvdW5kLiAgKi8KKworc3RhdGljIHN0cnVjdCBkdW1teV9m cmFtZSAqKgorbG9va3VwX2R1bW15X2ZyYW1lIChzdHJ1Y3QgZnJhbWVfaWQg ZHVtbXlfaWQpCiB7Ci0gIHN0cnVjdCBkdW1teV9mcmFtZSAqZHVtbXksICpu ZXh0OworICBzdHJ1Y3QgZHVtbXlfZnJhbWUgKipkcDsKIAotICBmb3IgKGR1 bW15ID0gZHVtbXlfZnJhbWVfc3RhY2s7IGR1bW15OyBkdW1teSA9IG5leHQp CisgIGZvciAoZHAgPSAmZHVtbXlfZnJhbWVfc3RhY2s7ICpkcCAhPSBOVUxM OyBkcCA9ICYoKmRwKS0+bmV4dCkKICAgICB7Ci0gICAgICBuZXh0ID0gZHVt bXktPm5leHQ7Ci0gICAgICByZWdjYWNoZV94ZnJlZSAoZHVtbXktPnJlZ2Nh Y2hlKTsKLSAgICAgIHhmcmVlIChkdW1teSk7CisgICAgICBpZiAoZnJhbWVf aWRfZXEgKCgqZHApLT5pZCwgZHVtbXlfaWQpKQorCXJldHVybiBkcDsKICAg ICB9CiAKLSAgZHVtbXlfZnJhbWVfc3RhY2sgPSBOVUxMOworICByZXR1cm4g TlVMTDsKK30KKworLyogUG9wIHRoZSBkdW1teSBmcmFtZSBEVU1NWV9JRCwg cmVzdG9yaW5nIHByb2dyYW0gc3RhdGUgdG8gdGhhdCBiZWZvcmUgdGhlCisg ICBmcmFtZSB3YXMgY3JlYXRlZC4KKyAgIE9uIHJldHVybiByZWluaXRfZnJh bWVfY2FjaGUgaGFzIGJlZW4gY2FsbGVkLgorICAgSWYgdGhlIGZyYW1lIGlz bid0IGZvdW5kLCBmbGFnIGFuIGludGVybmFsIGVycm9yLgorCisgICBOT1RF OiBUaGlzIGNhbiBvbmx5IHBvcCB0aGUgb25lIGZyYW1lLCBldmVuIGlmIGl0 IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlCisgICBzdGFjaywgYmVjYXVzZSB0 aGUgb3RoZXIgZnJhbWVzIG1heSBiZSBmb3IgZGlmZmVyZW50IHRocmVhZHMs IGFuZCB0aGVyZSdzCisgICBjdXJyZW50bHkgbm8gd2F5IHRvIHRlbGwgd2hp Y2ggc3RhY2sgZnJhbWUgaXMgZm9yIHdoaWNoIHRocmVhZC4gICovCisKK3Zv aWQKK2R1bW15X2ZyYW1lX3BvcCAoc3RydWN0IGZyYW1lX2lkIGR1bW15X2lk KQoreworICBzdHJ1Y3QgZHVtbXlfZnJhbWUgKipkcDsKKworICBkcCA9IGxv b2t1cF9kdW1teV9mcmFtZSAoZHVtbXlfaWQpOworICBnZGJfYXNzZXJ0IChk cCAhPSBOVUxMKTsKKworICBwb3BfZHVtbXlfZnJhbWUgKGRwKTsKK30KKwor LyogVGhlcmUgbWF5IGJlIHN0YWxlIGR1bW15IGZyYW1lcywgcGVyaGFwcyBs ZWZ0IG92ZXIgZnJvbSB3aGVuIGEgbG9uZ2p1bXAgdG9vaworICAgdXMgb3V0 IG9mIGEgZnVuY3Rpb24gdGhhdCB3YXMgY2FsbGVkIGJ5IHRoZSBkZWJ1Z2dl ci4gIENsZWFuIHRoZW0gdXAgYXQKKyAgIGxlYXN0IG9uY2Ugd2hlbmV2ZXIg d2Ugc3RhcnQgYSBuZXcgaW5mZXJpb3IuICAqLworCitzdGF0aWMgdm9pZAor Y2xlYW51cF9kdW1teV9mcmFtZXMgKHN0cnVjdCB0YXJnZXRfb3BzICp0YXJn ZXQsIGludCBmcm9tX3R0eSkKK3sKKyAgd2hpbGUgKGR1bW15X2ZyYW1lX3N0 YWNrICE9IE5VTEwpCisgICAgcmVtb3ZlX2R1bW15X2ZyYW1lICgmZHVtbXlf ZnJhbWVfc3RhY2spOwogfQogCiAvKiBSZXR1cm4gdGhlIGR1bW15IGZyYW1l IGNhY2hlLCBpdCBjb250YWlucyBib3RoIHRoZSBJRCwgYW5kIGEKQEAgLTE0 Niw3ICsxODYsNyBAQCBzdHJ1Y3QgZHVtbXlfZnJhbWVfY2FjaGUKICAgc3Ry dWN0IHJlZ2NhY2hlICpwcmV2X3JlZ2NhY2hlOwogfTsKIAotaW50CitzdGF0 aWMgaW50CiBkdW1teV9mcmFtZV9zbmlmZmVyIChjb25zdCBzdHJ1Y3QgZnJh bWVfdW53aW5kICpzZWxmLAogCQkgICAgIHN0cnVjdCBmcmFtZV9pbmZvICp0 aGlzX2ZyYW1lLAogCQkgICAgIHZvaWQgKip0aGlzX3Byb2xvZ3VlX2NhY2hl KQpAQCAtMTYyLDcgKzIwMiw3IEBAIGR1bW15X2ZyYW1lX3NuaWZmZXIgKGNv bnN0IHN0cnVjdCBmcmFtZV8KICAgICAgdGhhdCBQQyB0byBhcHBseSBzdGFu ZGFyZCBmcmFtZSBJRCB1bndpbmQgdGVjaG5pcXVlcyBpcyBqdXN0CiAgICAg IGFza2luZyBmb3IgdHJvdWJsZS4gICovCiAgIAotICAvKiBEb24ndCBib3Ro ZXIgdW5sZXMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGR1bW15IGZyYW1lLiAg Ki8KKyAgLyogRG9uJ3QgYm90aGVyIHVubGVzcyB0aGVyZSBpcyBhdCBsZWFz dCBvbmUgZHVtbXkgZnJhbWUuICAqLwogICBpZiAoZHVtbXlfZnJhbWVfc3Rh Y2sgIT0gTlVMTCkKICAgICB7CiAgICAgICAvKiBVc2UgYW4gYXJjaGl0ZWN0 dXJlIHNwZWNpZmljIG1ldGhvZCB0byBleHRyYWN0IHRoaXMgZnJhbWUncwpA QCAtMTc4LDcgKzIxOCw3IEBAIGR1bW15X2ZyYW1lX3NuaWZmZXIgKGNvbnN0 IHN0cnVjdCBmcmFtZV8KIAkgICAgewogCSAgICAgIHN0cnVjdCBkdW1teV9m cmFtZV9jYWNoZSAqY2FjaGU7CiAJICAgICAgY2FjaGUgPSBGUkFNRV9PQlNU QUNLX1pBTExPQyAoc3RydWN0IGR1bW15X2ZyYW1lX2NhY2hlKTsKLQkgICAg ICBjYWNoZS0+cHJldl9yZWdjYWNoZSA9IGR1bW15ZnJhbWUtPnJlZ2NhY2hl OworCSAgICAgIGNhY2hlLT5wcmV2X3JlZ2NhY2hlID0gZ2V0X2luZmVyaW9y X3RocmVhZF9zdGF0ZV9yZWdjYWNoZSAoZHVtbXlmcmFtZS0+Y2FsbGVyX3N0 YXRlKTsKIAkgICAgICBjYWNoZS0+dGhpc19pZCA9IHRoaXNfaWQ7CiAJICAg ICAgKCp0aGlzX3Byb2xvZ3VlX2NhY2hlKSA9IGNhY2hlOwogCSAgICAgIHJl dHVybiAxOwpAQCAtMjE1LDcgKzI1NSw3IEBAIGR1bW15X2ZyYW1lX3ByZXZf cmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV8KICAgcmV0dXJuIHJlZ192YWw7CiB9 CiAKLS8qIEFzc3VtaW5nIHRoYXQgVEhJUyBmcmFtZSBpcyBhIGR1bW15LCBy ZXR1cm4gdGhlIElEIG9mIFRISVMgZnJhbWUuICBUaGF0IElEIGlzCisvKiBB c3N1bWluZyB0aGF0IFRISVNfRlJBTUUgaXMgYSBkdW1teSwgcmV0dXJuIGl0 cyBJRC4gIFRoYXQgSUQgaXMKICAgIGRldGVybWluZWQgYnkgZXhhbWluaW5n IHRoZSBORVhUIGZyYW1lJ3MgdW53b3VuZCByZWdpc3RlcnMgdXNpbmcKICAg IHRoZSBtZXRob2QgZHVtbXlfaWQoKS4gIEFzIGEgc2lkZSBlZmZlY3QsIFRI SVMgZHVtbXkgZnJhbWUncwogICAgZHVtbXkgY2FjaGUgaXMgbG9jYXRlZCBh bmQgYW5kIHNhdmVkIGluIFRISVNfUFJPTE9HVUVfQ0FDSEUuICAqLwpJbmRl eDogZHVtbXktZnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2R1bW15LWZyYW1lLmgsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAtdSAtcCAtdSAtcCAtcjEuMjQgZHVt bXktZnJhbWUuaAotLS0gZHVtbXktZnJhbWUuaAkzIEphbiAyMDA5IDA1OjU3 OjUxIC0wMDAwCTEuMjQKKysrIGR1bW15LWZyYW1lLmgJMTkgSmFuIDIwMDkg MDE6MDg6NDYgLTAwMDAKQEAgLTIyLDggKzIyLDcgQEAKIAogI2luY2x1ZGUg ImZyYW1lLmgiCiAKLXN0cnVjdCBmcmFtZV9pbmZvOwotc3RydWN0IHJlZ2Nh Y2hlOworc3RydWN0IGluZmVyaW9yX3RocmVhZF9zdGF0ZTsKIHN0cnVjdCBm cmFtZV91bndpbmQ7CiAKIC8qIFB1c2ggdGhlIGluZm9ybWF0aW9uIG5lZWRl ZCB0byBpZGVudGlmeSwgYW5kIHVud2luZCBmcm9tLCBhIGR1bW15CkBAIC0z OSw4ICszOCwxNyBAQCBzdHJ1Y3QgZnJhbWVfdW53aW5kOwogICAgYmUgZXhw YW5kZWQgc28gdGhhdCBpdCBrbm93bnMgdGhlIGxvd2VyL3VwcGVyIGV4dGVu dCBvZiB0aGUgZHVtbXkKICAgIGZyYW1lJ3MgY29kZS4gICovCiAKLWV4dGVy biB2b2lkIGR1bW15X2ZyYW1lX3B1c2ggKHN0cnVjdCByZWdjYWNoZSAqcmVn Y2FjaGUsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgZnJhbWVfaWQgKmR1bW15 X2lkKTsKK2V4dGVybiB2b2lkIGR1bW15X2ZyYW1lX3B1c2ggKHN0cnVjdCBp bmZlcmlvcl90aHJlYWRfc3RhdGUgKmNhbGxlcl9zdGF0ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmcmFtZV9pZCAq ZHVtbXlfaWQpOworCisvKiBQb3AgdGhlIGR1bW15IGZyYW1lIERVTU1ZX0lE LCByZXN0b3JpbmcgcHJvZ3JhbSBzdGF0ZSB0byB0aGF0IGJlZm9yZSB0aGUK KyAgIGZyYW1lIHdhcyBjcmVhdGVkLgorICAgT24gcmV0dXJuIHJlaW5pdF9m cmFtZV9jYWNoZSBoYXMgYmVlbiBjYWxsZWQuCisgICBJZiB0aGUgZnJhbWUg aXNuJ3QgZm91bmQsIGZsYWcgYW4gaW50ZXJuYWwgZXJyb3IuCisKKyAgIE5P VEU6IFRoaXMgY2FuIG9ubHkgcG9wIHRoZSBvbmUgZnJhbWUsIGV2ZW4gaWYg aXQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgIHN0YWNrLCBiZWNhdXNl IHRoZSBvdGhlciBmcmFtZXMgbWF5IGJlIGZvciBkaWZmZXJlbnQgdGhyZWFk cywgYW5kIHRoZXJlJ3MKKyAgIGN1cnJlbnRseSBubyB3YXkgdG8gdGVsbCB3 aGljaCBzdGFjayBmcmFtZSBpcyBmb3Igd2hpY2ggdGhyZWFkLiAgKi8KIAog ZXh0ZXJuIHZvaWQgZHVtbXlfZnJhbWVfcG9wIChzdHJ1Y3QgZnJhbWVfaWQg ZHVtbXlfaWQpOwogCkluZGV4OiBmcmFtZS5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZnJhbWUuYyx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4yNTgKZGlmZiAtdSAtcCAtdSAtcCAtcjEu MjU4IGZyYW1lLmMKLS0tIGZyYW1lLmMJMTUgSmFuIDIwMDkgMTU6Mzg6NTcg LTAwMDAJMS4yNTgKKysrIGZyYW1lLmMJMTkgSmFuIDIwMDkgMDE6MDg6NDYg LTAwMDAKQEAgLTUzNiw2ICs1MzYsMTQgQEAgZnJhbWVfcG9wIChzdHJ1Y3Qg ZnJhbWVfaW5mbyAqdGhpc19mcmFtZQogICBzdHJ1Y3QgcmVnY2FjaGUgKnNj cmF0Y2g7CiAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKIAorICBpZiAo Z2V0X2ZyYW1lX3R5cGUgKHRoaXNfZnJhbWUpID09IERVTU1ZX0ZSQU1FKQor ICAgIHsKKyAgICAgIC8qIFBvcHBpbmcgYSBkdW1teSBmcmFtZSBpbnZvbHZl cyByZXN0b3JpbmcgbW9yZSB0aGFuIGp1c3QgcmVnaXN0ZXJzLgorCSBkdW1t eV9mcmFtZV9wb3AgZG9lcyBhbGwgdGhlIHdvcmsuICAqLworICAgICAgZHVt bXlfZnJhbWVfcG9wIChnZXRfZnJhbWVfaWQgKHRoaXNfZnJhbWUpKTsKKyAg ICAgIHJldHVybjsKKyAgICB9CisKICAgLyogRW5zdXJlIHRoYXQgd2UgaGF2 ZSBhIGZyYW1lIHRvIHBvcCB0by4gICovCiAgIHByZXZfZnJhbWUgPSBnZXRf cHJldl9mcmFtZV8xICh0aGlzX2ZyYW1lKTsKIApAQCAtNTQ5LDExICs1NTcs NiBAQCBmcmFtZV9wb3AgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1l CiAgIHNjcmF0Y2ggPSBmcmFtZV9zYXZlX2FzX3JlZ2NhY2hlIChwcmV2X2Zy YW1lKTsKICAgY2xlYW51cHMgPSBtYWtlX2NsZWFudXBfcmVnY2FjaGVfeGZy ZWUgKHNjcmF0Y2gpOwogCi0gIC8qIElmIHdlIGFyZSBwb3BwaW5nIGEgZHVt bXkgZnJhbWUsIGNsZWFuIHVwIHRoZSBhc3NvY2lhdGVkCi0gICAgIGRhdGEg YXMgd2VsbC4gICovCi0gIGlmIChnZXRfZnJhbWVfdHlwZSAodGhpc19mcmFt ZSkgPT0gRFVNTVlfRlJBTUUpCi0gICAgZHVtbXlfZnJhbWVfcG9wIChnZXRf ZnJhbWVfaWQgKHRoaXNfZnJhbWUpKTsKLQogICAvKiBGSVhNRTogY2FnbmV5 LzIwMDMtMDMtMTY6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB0ZWxsIHRo ZQogICAgICB0YXJnZXQncyByZWdpc3RlciBjYWNoZSB0aGF0IGl0IGlzIGFi b3V0IHRvIGJlIGhpdCB3aXRoIGEgYnVyc3QKICAgICAgcmVnaXN0ZXIgdHJh bnNmZXIgYW5kIHRoYXQgdGhlIHNlcXVlbmNlIG9mIHJlZ2lzdGVyIHdyaXRl cyBzaG91bGQKSW5kZXg6IGluZmNhbGwuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2luZmNhbGwuYyx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4xMDgKZGlmZiAtdSAtcCAtdSAtcCAtcjEu MTA4IGluZmNhbGwuYwotLS0gaW5mY2FsbC5jCTMgSmFuIDIwMDkgMDU6NTc6 NTIgLTAwMDAJMS4xMDgKKysrIGluZmNhbGwuYwkxOSBKYW4gMjAwOSAwMTow ODo0NiAtMDAwMApAQCAtMzYsNiArMzYsMTMgQEAKICNpbmNsdWRlICJkdW1t eS1mcmFtZS5oIgogI2luY2x1ZGUgImFkYS1sYW5nLmgiCiAjaW5jbHVkZSAi Z2RidGhyZWFkLmgiCisjaW5jbHVkZSAiZXhjZXB0aW9ucy5oIgorCisvKiBJ ZiB3ZSBjYW4ndCBmaW5kIGEgZnVuY3Rpb24ncyBuYW1lIGZyb20gaXRzIGFk ZHJlc3MsCisgICB3ZSBwcmludCB0aGlzIGluc3RlYWQuICAqLworI2RlZmlu ZSBSQVdfRlVOQ1RJT05fQUREUkVTU19GT1JNQVQgImF0IDB4JXMiCisjZGVm aW5lIFJBV19GVU5DVElPTl9BRERSRVNTX1NJWkUgKHNpemVvZiAoUkFXX0ZV TkNUSU9OX0FERFJFU1NfRk9STUFUKSBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsgMiAqIHNpemVvZiAoQ09SRV9BRERSKSkKIAog LyogTk9URTogY2FnbmV5LzIwMDMtMDQtMTY6IFdoYXQncyB0aGUgZnV0dXJl IG9mIHRoaXMgY29kZT8KIApAQCAtMjYwLDE2ICsyNjcsNiBAQCBmaW5kX2Z1 bmN0aW9uX2FkZHIgKHN0cnVjdCB2YWx1ZSAqZnVuY3RpCiAgIHJldHVybiBm dW5hZGRyICsgZ2RiYXJjaF9kZXByZWNhdGVkX2Z1bmN0aW9uX3N0YXJ0X29m ZnNldCAoY3VycmVudF9nZGJhcmNoKTsKIH0KIAotLyogQ2FsbCBicmVha3Bv aW50X2F1dG9fZGVsZXRlIG9uIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRo ZSBicHN0YXQKLSAgIG9mIHRoZSBjdXJyZW50IHRocmVhZC4gICovCi0KLXN0 YXRpYyB2b2lkCi1icmVha3BvaW50X2F1dG9fZGVsZXRlX2NvbnRlbnRzICh2 b2lkICphcmcpCi17Ci0gIGlmICghcHRpZF9lcXVhbCAoaW5mZXJpb3JfcHRp ZCwgbnVsbF9wdGlkKSkKLSAgICBicmVha3BvaW50X2F1dG9fZGVsZXRlIChp bmZlcmlvcl90aHJlYWQgKCktPnN0b3BfYnBzdGF0KTsKLX0KLQogLyogRm9y IENBTExfRFVNTVlfT05fU1RBQ0ssIHB1c2ggYSBicmVha3BvaW50IHNlcXVl bmNlIHRoYXQgdGhlIGNhbGxlZAogICAgZnVuY3Rpb24gcmV0dXJucyB0by4g ICovCiAKQEAgLTI4OCw2ICsyODUsMTAzIEBAIHB1c2hfZHVtbXlfY29kZSAo c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gKIAkJCQkgIHJlZ2NhY2hlKTsKIH0K IAorLyogRmV0Y2ggdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGF0IEZVTkFE RFIuCisgICBUaGlzIGlzIHVzZWQgaW4gcHJpbnRpbmcgYW4gZXJyb3IgbWVz c2FnZSBmb3IgY2FsbF9mdW5jdGlvbl9ieV9oYW5kLgorICAgQlVGIGlzIHVz ZWQgdG8gcHJpbnQgRlVOQUREUiBpbiBoZXggaWYgdGhlIGZ1bmN0aW9uIG5h bWUgY2Fubm90IGJlCisgICBkZXRlcm1pbmVkLiAgSXQgbXVzdCBiZSBsYXJn ZSBlbm91Z2ggdG8gaG9sZCBmb3JtYXR0ZWQgcmVzdWx0IG9mCisgICBSQVdf RlVOQ1RJT05fQUREUkVTU19GT1JNQVQuICAqLworCitzdGF0aWMgY29uc3Qg Y2hhciAqCitnZXRfZnVuY3Rpb25fbmFtZSAoQ09SRV9BRERSIGZ1bmFkZHIs IGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworICB7CisgICAgc3RydWN0 IHN5bWJvbCAqc3ltYm9sID0gZmluZF9wY19mdW5jdGlvbiAoZnVuYWRkcik7 CisgICAgaWYgKHN5bWJvbCkKKyAgICAgIHJldHVybiBTWU1CT0xfUFJJTlRf TkFNRSAoc3ltYm9sKTsKKyAgfQorCisgIHsKKyAgICAvKiBUcnkgdGhlIG1p bmltYWwgc3ltYm9scy4gICovCisgICAgc3RydWN0IG1pbmltYWxfc3ltYm9s ICptc3ltYm9sID0gbG9va3VwX21pbmltYWxfc3ltYm9sX2J5X3BjIChmdW5h ZGRyKTsKKyAgICBpZiAobXN5bWJvbCkKKyAgICAgIHJldHVybiBTWU1CT0xf UFJJTlRfTkFNRSAobXN5bWJvbCk7CisgIH0KKworICB7CisgICAgY2hhciAq dG1wID0geHN0cnByaW50ZiAoXyhSQVdfRlVOQ1RJT05fQUREUkVTU19GT1JN QVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9zdHJpbmcg KGZ1bmFkZHIpKTsKKyAgICBnZGJfYXNzZXJ0IChzdHJsZW4gKHRtcCkgKyAx IDw9IGJ1Zl9zaXplKTsKKyAgICBzdHJjcHkgKGJ1ZiwgdG1wKTsKKyAgICB4 ZnJlZSAodG1wKTsKKyAgICByZXR1cm4gYnVmOworICB9Cit9CisKKy8qIFN1 YnJvdXRpbmUgb2YgY2FsbF9mdW5jdGlvbl9ieV9oYW5kIHRvIHNpbXBsaWZ5 IGl0LgorICAgU3RhcnQgdXAgdGhlIGluZmVyaW9yIGFuZCB3YWl0IGZvciBp dCB0byBzdG9wLgorICAgUmV0dXJuIHRoZSBleGNlcHRpb24gaWYgdGhlcmUn cyBhbiBlcnJvciwgb3IgYW4gZXhjZXB0aW9uIHdpdGgKKyAgIHJlYXNvbiA+ PSAwIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuCisKKyAgIFRoaXMgaXMgZG9uZSBp bnNpZGUgYSBUUllfQ0FUQ0ggc28gdGhlIGNhbGxlciBuZWVkbid0IHdvcnJ5 IGFib3V0CisgICB0aHJvd24gZXJyb3JzLiAgVGhlIGNhbGxlciBzaG91bGQg cmV0aHJvdyBpZiB0aGVyZSdzIGFuIGVycm9yLiAgKi8KKworc3RhdGljIHN0 cnVjdCBnZGJfZXhjZXB0aW9uCitydW5faW5mZXJpb3JfY2FsbCAoc3RydWN0 IHRocmVhZF9pbmZvICpjYWxsX3RocmVhZCwgQ09SRV9BRERSIHJlYWxfcGMp Cit7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisgIGlu dCBzYXZlZF9hc3luYyA9IDA7CisgIGludCBzYXZlZF9zdXBwcmVzc19yZXN1 bWVfb2JzZXJ2ZXIgPSBzdXBwcmVzc19yZXN1bWVfb2JzZXJ2ZXI7CisgIGlu dCBzYXZlZF9zdXBwcmVzc19zdG9wX29ic2VydmVyID0gc3VwcHJlc3Nfc3Rv cF9vYnNlcnZlcjsKKyAgcHRpZF90IGNhbGxfdGhyZWFkX3B0aWQgPSBjYWxs X3RocmVhZC0+cHRpZDsKKyAgY2hhciAqc2F2ZWRfdGFyZ2V0X3Nob3J0bmFt ZSA9IHhzdHJkdXAgKHRhcmdldF9zaG9ydG5hbWUpOworCisgIGNsZWFyX3By b2NlZWRfc3RhdHVzICgpOworCisgIGRpc2FibGVfd2F0Y2hwb2ludHNfYmVm b3JlX2ludGVyYWN0aXZlX2NhbGxfc3RhcnQgKCk7CisgIGNhbGxfdGhyZWFk LT5wcm9jZWVkX3RvX2ZpbmlzaCA9IDE7IC8qIFdlIHdhbnQgc3RvcF9yZWdp c3RlcnMsIHBsZWFzZS4uLiAqLworCisgIGlmICh0YXJnZXRfY2FuX2FzeW5j X3AgKCkpCisgICAgc2F2ZWRfYXN5bmMgPSB0YXJnZXRfYXN5bmNfbWFzayAo MCk7CisKKyAgc3VwcHJlc3NfcmVzdW1lX29ic2VydmVyID0gMTsKKyAgc3Vw cHJlc3Nfc3RvcF9vYnNlcnZlciA9IDE7CisKKyAgVFJZX0NBVENIIChlLCBS RVRVUk5fTUFTS19BTEwpCisgICAgcHJvY2VlZCAocmVhbF9wYywgVEFSR0VU X1NJR05BTF8wLCAwKTsKKworICAvKiBBdCB0aGlzIHBvaW50IHRoZSBjdXJy ZW50IHRocmVhZCBtYXkgaGF2ZSBjaGFuZ2VkLgorICAgICBDQUxMX1RIUkVB RCBpcyBubyBsb25nZXIgdXNhYmxlIGFzIGl0cyB0aHJlYWQgbWF5IGhhdmUg ZXhpdGVkLgorICAgICBTZXQgaXQgdG8gTlVMTCB0byBwcmV2ZW50IGl0cyBm dXJ0aGVyIHVzZS4gICovCisgIGNhbGxfdGhyZWFkID0gTlVMTDsKKworICBz dXBwcmVzc19yZXN1bWVfb2JzZXJ2ZXIgPSBzYXZlZF9zdXBwcmVzc19yZXN1 bWVfb2JzZXJ2ZXI7CisgIHN1cHByZXNzX3N0b3Bfb2JzZXJ2ZXIgPSBzYXZl ZF9zdXBwcmVzc19zdG9wX29ic2VydmVyOworCisgIC8qIERvbid0IHJlc3Rv cmUgdGhlIGFzeW5jIG1hc2sgaWYgdGhlIHRhcmdldCBoYXMgY2hhbmdlZCwK KyAgICAgc2F2ZWRfYXN5bmMgaXMgZm9yIHRoZSBvcmlnaW5hbCB0YXJnZXQu ICAqLworICBpZiAoc2F2ZWRfYXN5bmMKKyAgICAgICYmIHN0cmNtcCAoc2F2 ZWRfdGFyZ2V0X3Nob3J0bmFtZSwgdGFyZ2V0X3Nob3J0bmFtZSkgPT0gMCkK KyAgICB0YXJnZXRfYXN5bmNfbWFzayAoc2F2ZWRfYXN5bmMpOworCisgIGVu YWJsZV93YXRjaHBvaW50c19hZnRlcl9pbnRlcmFjdGl2ZV9jYWxsX3N0b3Ag KCk7CisKKyAgLyogQ2FsbCBicmVha3BvaW50X2F1dG9fZGVsZXRlIG9uIHRo ZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBicHN0YXQKKyAgICAgb2YgaW5m ZXJpb3IgY2FsbCB0aHJlYWQuCisgICAgIElmIGFsbCBlcnJvcigpcyBvdXQg b2YgcHJvY2VlZCBlbmRlZCB1cCBjYWxsaW5nIG5vcm1hbF9zdG9wCisgICAg IChhbmQgcGVyaGFwcyB0aGV5IHNob3VsZDsgaXQgYWxyZWFkeSBkb2VzIGlu IHRoZSBzcGVjaWFsIGNhc2UKKyAgICAgb2YgZXJyb3Igb3V0IG9mIHJlc3Vt ZSgpKSwgdGhlbiB3ZSB3b3VsZG4ndCBuZWVkIHRoaXMuICAqLworICBpZiAo ZS5yZWFzb24gPCAwKQorICAgIHsKKyAgICAgIHN0cnVjdCB0aHJlYWRfaW5m byAqdHAgPSBmaW5kX3RocmVhZF9waWQgKGNhbGxfdGhyZWFkX3B0aWQpOwor ICAgICAgaWYgKHRwICE9IE5VTEwpCisJYnJlYWtwb2ludF9hdXRvX2RlbGV0 ZSAodHAtPnN0b3BfYnBzdGF0KTsKKyAgICB9CisKKyAgeGZyZWUgKHNhdmVk X3RhcmdldF9zaG9ydG5hbWUpOworCisgIHJldHVybiBlOworfQorCiAvKiBB bGwgdGhpcyBzdHVmZiB3aXRoIGEgZHVtbXkgZnJhbWUgbWF5IHNlZW0gdW5u ZWNlc3NhcmlseSBjb21wbGljYXRlZAogICAgKHdoeSBub3QganVzdCBzYXZl IHJlZ2lzdGVycyBpbiBHREI/KS4gIFRoZSBwdXJwb3NlIG9mIHB1c2hpbmcg YSBkdW1teQogICAgZnJhbWUgd2hpY2ggbG9va3MganVzdCBsaWtlIGEgcmVh bCBmcmFtZSBpcyBzbyB0aGF0IGlmIHlvdSBjYWxsIGEKQEAgLTMxMywyMCAr NDA3LDIyIEBAIGNhbGxfZnVuY3Rpb25fYnlfaGFuZCAoc3RydWN0IHZhbHVl ICpmdW4KICAgc3RydWN0IHR5cGUgKnZhbHVlc190eXBlLCAqdGFyZ2V0X3Zh bHVlc190eXBlOwogICB1bnNpZ25lZCBjaGFyIHN0cnVjdF9yZXR1cm4gPSAw LCBsYW5nX3N0cnVjdF9yZXR1cm4gPSAwOwogICBDT1JFX0FERFIgc3RydWN0 X2FkZHIgPSAwOwotICBzdHJ1Y3QgcmVnY2FjaGUgKnJldGJ1ZjsKLSAgc3Ry dWN0IGNsZWFudXAgKnJldGJ1Zl9jbGVhbnVwOwogICBzdHJ1Y3QgaW5mZXJp b3Jfc3RhdHVzICppbmZfc3RhdHVzOwogICBzdHJ1Y3QgY2xlYW51cCAqaW5m X3N0YXR1c19jbGVhbnVwOworICBzdHJ1Y3QgaW5mZXJpb3JfdGhyZWFkX3N0 YXRlICpjYWxsZXJfc3RhdGU7CisgIHN0cnVjdCBjbGVhbnVwICpjYWxsZXJf c3RhdGVfY2xlYW51cDsKICAgQ09SRV9BRERSIGZ1bmFkZHI7CiAgIENPUkVf QUREUiByZWFsX3BjOwogICBzdHJ1Y3QgdHlwZSAqZnR5cGUgPSBjaGVja190 eXBlZGVmICh2YWx1ZV90eXBlIChmdW5jdGlvbikpOwogICBDT1JFX0FERFIg YnBfYWRkcjsKLSAgc3RydWN0IHJlZ2NhY2hlICpjYWxsZXJfcmVnY2FjaGU7 Ci0gIHN0cnVjdCBjbGVhbnVwICpjYWxsZXJfcmVnY2FjaGVfY2xlYW51cDsK ICAgc3RydWN0IGZyYW1lX2lkIGR1bW15X2lkOwogICBzdHJ1Y3QgY2xlYW51 cCAqYXJnc19jbGVhbnVwOwogICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7 CiAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworICBwdGlkX3QgY2FsbF90 aHJlYWRfcHRpZDsKKyAgc3RydWN0IGdkYl9leGNlcHRpb24gZTsKKyAgY29u c3QgY2hhciAqbmFtZTsKKyAgY2hhciBuYW1lX2J1ZltSQVdfRlVOQ1RJT05f QUREUkVTU19TSVpFXTsKIAogICBpZiAoVFlQRV9DT0RFIChmdHlwZSkgPT0g VFlQRV9DT0RFX1BUUikKICAgICBmdHlwZSA9IGNoZWNrX3R5cGVkZWYgKFRZ UEVfVEFSR0VUX1RZUEUgKGZ0eXBlKSk7CkBAIC0zNDAsMjUgKzQzNiwxOCBA QCBjYWxsX2Z1bmN0aW9uX2J5X2hhbmQgKHN0cnVjdCB2YWx1ZSAqZnVuCiAg IGlmICghZ2RiYXJjaF9wdXNoX2R1bW15X2NhbGxfcCAoZ2RiYXJjaCkpCiAg ICAgZXJyb3IgKF8oIlRoaXMgdGFyZ2V0IGRvZXMgbm90IHN1cHBvcnQgZnVu Y3Rpb24gY2FsbHMuIikpOwogCi0gIC8qIENyZWF0ZSBhIGNsZWFudXAgY2hh aW4gdGhhdCBjb250YWlucyB0aGUgcmV0YnVmIChidWZmZXIKLSAgICAgY29u dGFpbmluZyB0aGUgcmVnaXN0ZXIgdmFsdWVzKS4gIFRoaXMgY2hhaW4gaXMg Y3JlYXRlIEJFRk9SRSB0aGUKLSAgICAgaW5mX3N0YXR1cyBjaGFpbiBzbyB0 aGF0IHRoZSBpbmZlcmlvciBzdGF0dXMgY2FuIGNsZWFuZWQgdXAKLSAgICAg KHJlc3RvcmVkIG9yIGRpc2NhcmRlZCkgd2l0aG91dCBoYXZpbmcgdGhlIHJl dGJ1ZiBmcmVlZC4gICovCi0gIHJldGJ1ZiA9IHJlZ2NhY2hlX3htYWxsb2Mg KGdkYmFyY2gpOwotICByZXRidWZfY2xlYW51cCA9IG1ha2VfY2xlYW51cF9y ZWdjYWNoZV94ZnJlZSAocmV0YnVmKTsKLQotICAvKiBBIGNsZWFudXAgZm9y IHRoZSBpbmZlcmlvciBzdGF0dXMuICBDcmVhdGUgdGhpcyBBRlRFUiB0aGUg cmV0YnVmCi0gICAgIHNvIHRoYXQgdGhpcyBjYW4gYmUgZGlzY2FyZGVkIG9y IGFwcGxpZWQgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoCi0gICAgIHRoZSBy ZWdidWYuICAqLwotICBpbmZfc3RhdHVzID0gc2F2ZV9pbmZlcmlvcl9zdGF0 dXMgKDEpOworICAvKiBBIGNsZWFudXAgZm9yIHRoZSBpbmZlcmlvciBzdGF0 dXMuCisgICAgIFRoaXMgaXMgb25seSBuZWVkZWQgd2hpbGUgd2UncmUgcHJl cGFyaW5nIHRoZSBpbmZlcmlvciBmdW5jdGlvbiBjYWxsLiAgKi8KKyAgaW5m X3N0YXR1cyA9IHNhdmVfaW5mZXJpb3Jfc3RhdHVzICgpOwogICBpbmZfc3Rh dHVzX2NsZWFudXAgPSBtYWtlX2NsZWFudXBfcmVzdG9yZV9pbmZlcmlvcl9z dGF0dXMgKGluZl9zdGF0dXMpOwogCi0gIC8qIFNhdmUgdGhlIGNhbGxlcidz IHJlZ2lzdGVycyBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlc3RvcmVkIG9uY2Ug dGhlCisgIC8qIFNhdmUgdGhlIGNhbGxlcidzIHJlZ2lzdGVycyBhbmQgb3Ro ZXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICBpbmZlcmlvciBp dHNlbGYgc28gdGhhdCB0aGV5IGNhbiBiZSByZXN0b3JlZCBvbmNlIHRoZQog ICAgICBjYWxsZWUgcmV0dXJucy4gIFRvIGFsbG93IG5lc3RlZCBjYWxscyB0 aGUgcmVnaXN0ZXJzIGFyZSAoZnVydGhlcgogICAgICBkb3duKSBwdXNoZWQg b250byBhIGR1bW15IGZyYW1lIHN0YWNrLiAgSW5jbHVkZSBhIGNsZWFudXAg KHdoaWNoCiAgICAgIGlzIHRvc3NlZCBvbmNlIHRoZSByZWdjYWNoZSBoYXMg YmVlbiBwdXNoZWQpLiAgKi8KLSAgY2FsbGVyX3JlZ2NhY2hlID0gZnJhbWVf c2F2ZV9hc19yZWdjYWNoZSAoZnJhbWUpOwotICBjYWxsZXJfcmVnY2FjaGVf Y2xlYW51cCA9IG1ha2VfY2xlYW51cF9yZWdjYWNoZV94ZnJlZSAoY2FsbGVy X3JlZ2NhY2hlKTsKKyAgY2FsbGVyX3N0YXRlID0gc2F2ZV9pbmZlcmlvcl90 aHJlYWRfc3RhdGUgKCk7CisgIGNhbGxlcl9zdGF0ZV9jbGVhbnVwID0gbWFr ZV9jbGVhbnVwX3Jlc3RvcmVfaW5mZXJpb3JfdGhyZWFkX3N0YXRlIChjYWxs ZXJfc3RhdGUpOwogCiAgIC8qIEVuc3VyZSB0aGF0IHRoZSBpbml0aWFsIFNQ IGlzIGNvcnJlY3RseSBhbGlnbmVkLiAgKi8KICAgewpAQCAtNjMzLDk5ICs3 MjIsMTE3IEBAIGNhbGxfZnVuY3Rpb25fYnlfaGFuZCAoc3RydWN0IHZhbHVl ICpmdW4KICAgLyogRXZlcnl0aGluZydzIHJlYWR5LCBwdXNoIGFsbCB0aGUg aW5mbyBuZWVkZWQgdG8gcmVzdG9yZSB0aGUKICAgICAgY2FsbGVyIChhbmQg aWRlbnRpZnkgdGhlIGR1bW15LWZyYW1lKSBvbnRvIHRoZSBkdW1teS1mcmFt ZQogICAgICBzdGFjay4gICovCi0gIGR1bW15X2ZyYW1lX3B1c2ggKGNhbGxl cl9yZWdjYWNoZSwgJmR1bW15X2lkKTsKLSAgZGlzY2FyZF9jbGVhbnVwcyAo Y2FsbGVyX3JlZ2NhY2hlX2NsZWFudXApOworICBkdW1teV9mcmFtZV9wdXNo IChjYWxsZXJfc3RhdGUsICZkdW1teV9pZCk7CisKKyAgLyogRGlzY2FyZCBi b3RoIGluZl9zdGF0dXMgYW5kIGNhbGxlcl9zdGF0ZSBjbGVhbnVwcy4KKyAg ICAgRnJvbSB0aGlzIHBvaW50IG9uIHdlIGV4cGxpY2l0bHkgcmVzdG9yZSB0 aGUgYXNzb2NpYXRlZCBzdGF0ZQorICAgICBvciBkaXNjYXJkIGl0LiAgKi8K KyAgZGlzY2FyZF9jbGVhbnVwcyAoaW5mX3N0YXR1c19jbGVhbnVwKTsKIAog ICAvKiAtIFNOSVAgLSBTTklQIC0gU05JUCAtIFNOSVAgLSBTTklQIC0gU05J UCAtIFNOSVAgLSBTTklQIC0gU05JUCAtCiAgICAgIElmIHlvdSdyZSBsb29r aW5nIHRvIGltcGxlbWVudCBhc3luY2hyb25vdXMgZHVtbXktZnJhbWVzLCB0 aGVuCiAgICAgIGp1c3QgYmVsb3cgaXMgdGhlIHBsYWNlIHRvIGNob3AgdGhp cyBmdW5jdGlvbiBpbiB0d28uLiAgKi8KIAotICAvKiBOb3cgcHJvY2VlZCwg aGF2aW5nIHJlYWNoZWQgdGhlIGRlc2lyZWQgcGxhY2UuICAqLwotICBjbGVh cl9wcm9jZWVkX3N0YXR1cyAoKTsKLSAgICAKLSAgLyogRXhlY3V0ZSBhICJz dGFjayBkdW1teSIsIGEgcGllY2Ugb2YgY29kZSBzdG9yZWQgaW4gdGhlIHN0 YWNrIGJ5Ci0gICAgIHRoZSBkZWJ1Z2dlciB0byBiZSBleGVjdXRlZCBpbiB0 aGUgaW5mZXJpb3IuCi0KLSAgICAgVGhlIGR1bW15J3MgZnJhbWUgaXMgYXV0 b21hdGljYWxseSBwb3BwZWQgd2hlbmV2ZXIgdGhhdCBicmVhayBpcwotICAg ICBoaXQuICBJZiB0aGF0IGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBwcm9ncmFt IHN0b3BzLAotICAgICBjYWxsX2Z1bmN0aW9uX2J5X2hhbmQgcmV0dXJucyB0 byBpdHMgY2FsbGVyIHdpdGggdGhhdCBmcmFtZQotICAgICBhbHJlYWR5IGdv bmUgYW5kIHNldHMgUkMgdG8gMC4KLSAgIAotICAgICBPdGhlcndpc2UsIHNl dCBSQyB0byBhIG5vbi16ZXJvIHZhbHVlLiAgSWYgdGhlIGNhbGxlZCBmdW5j dGlvbgotICAgICByZWNlaXZlcyBhIHJhbmRvbSBzaWduYWwsIHdlIGRvIG5v dCBhbGxvdyB0aGUgdXNlciB0byBjb250aW51ZQotICAgICBleGVjdXRpbmcg aXQgYXMgdGhpcyBtYXkgbm90IHdvcmsuICBUaGUgZHVtbXkgZnJhbWUgaXMg cG9wZWQgYW5kCi0gICAgIHdlIHJldHVybiAxLiAgSWYgd2UgaGl0IGEgYnJl YWtwb2ludCwgd2UgbGVhdmUgdGhlIGZyYW1lIGluIHBsYWNlCi0gICAgIGFu ZCByZXR1cm4gMiAodGhlIGZyYW1lIHdpbGwgZXZlbnR1YWxseSBiZSBwb3Bw ZWQgd2hlbiB3ZSBkbyBoaXQKLSAgICAgdGhlIGR1bW15IGVuZCBicmVha3Bv aW50KS4gICovCi0KKyAgLyogVFAgaXMgaW52YWxpZCBhZnRlciBydW5faW5m ZXJpb3JfY2FsbCByZXR1cm5zLCBzbyBlbmNsb3NlIHRoaXMKKyAgICAgaW4g YSBibG9jayBzbyB0aGF0IGl0J3Mgb25seSBpbiBzY29wZSBkdXJpbmcgdGhl IHRpbWUgaXQncyB2YWxpZC4gICovCiAgIHsKLSAgICBzdHJ1Y3QgY2xlYW51 cCAqb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwIChudWxsX2NsZWFudXAs IDApOwotICAgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHMyOwotICAg IGludCBzYXZlZF9hc3luYyA9IDA7CiAgICAgc3RydWN0IHRocmVhZF9pbmZv ICp0cCA9IGluZmVyaW9yX3RocmVhZCAoKTsKIAotICAgIC8qIElmIGFsbCBl cnJvcigpcyBvdXQgb2YgcHJvY2VlZCBlbmRlZCB1cCBjYWxsaW5nIG5vcm1h bF9zdG9wCi0gICAgICAgKGFuZCBwZXJoYXBzIHRoZXkgc2hvdWxkOyBpdCBh bHJlYWR5IGRvZXMgaW4gdGhlIHNwZWNpYWwgY2FzZQotICAgICAgIG9mIGVy cm9yIG91dCBvZiByZXN1bWUoKSksIHRoZW4gd2Ugd291bGRuJ3QgbmVlZCB0 aGlzLiAgKi8KLSAgICBtYWtlX2NsZWFudXAgKGJyZWFrcG9pbnRfYXV0b19k ZWxldGVfY29udGVudHMsIE5VTEwpOwotCi0gICAgZGlzYWJsZV93YXRjaHBv aW50c19iZWZvcmVfaW50ZXJhY3RpdmVfY2FsbF9zdGFydCAoKTsKLSAgICB0 cC0+cHJvY2VlZF90b19maW5pc2ggPSAxOwkvKiBXZSB3YW50IHN0b3BfcmVn aXN0ZXJzLCBwbGVhc2UuLi4gKi8KLQotICAgIGlmICh0YXJnZXRfY2FuX2Fz eW5jX3AgKCkpCi0gICAgICBzYXZlZF9hc3luYyA9IHRhcmdldF9hc3luY19t YXNrICgwKTsKLQotICAgIG9sZF9jbGVhbnVwczIgPSBtYWtlX2NsZWFudXBf cmVzdG9yZV9pbnRlZ2VyICgmc3VwcHJlc3NfcmVzdW1lX29ic2VydmVyKTsK LSAgICBzdXBwcmVzc19yZXN1bWVfb2JzZXJ2ZXIgPSAxOwotICAgIG1ha2Vf Y2xlYW51cF9yZXN0b3JlX2ludGVnZXIgKCZzdXBwcmVzc19zdG9wX29ic2Vy dmVyKTsKLSAgICBzdXBwcmVzc19zdG9wX29ic2VydmVyID0gMTsKLSAgICBw cm9jZWVkIChyZWFsX3BjLCBUQVJHRVRfU0lHTkFMXzAsIDApOwotICAgIGRv X2NsZWFudXBzIChvbGRfY2xlYW51cHMyKTsKLSAgICAKLSAgICBpZiAoc2F2 ZWRfYXN5bmMpCi0gICAgICB0YXJnZXRfYXN5bmNfbWFzayAoc2F2ZWRfYXN5 bmMpOwotICAgIAotICAgIGVuYWJsZV93YXRjaHBvaW50c19hZnRlcl9pbnRl cmFjdGl2ZV9jYWxsX3N0b3AgKCk7Ci0gICAgICAKLSAgICBkaXNjYXJkX2Ns ZWFudXBzIChvbGRfY2xlYW51cHMpOworICAgIC8qIFNhdmUgdGhpcyB0aHJl YWQncyBwdGlkLCB3ZSBuZWVkIGl0IGxhdGVyIGJ1dCB0aGUgdGhyZWFkCisg ICAgICAgbWF5IGhhdmUgZXhpdGVkLiAgKi8KKyAgICBjYWxsX3RocmVhZF9w dGlkID0gdHAtPnB0aWQ7CisKKyAgICAvKiBSdW4gdGhlIGluZmVyaW9yIHVu dGlsIGl0IHN0b3BzLiAgKi8KKworICAgIGUgPSBydW5faW5mZXJpb3JfY2Fs bCAodHAsIHJlYWxfcGMpOwogICB9CiAKKyAgLyogUmV0aHJvdyBhbiBlcnJv ciBpZiB3ZSBnb3Qgb25lIHRyeWluZyB0byBydW4gdGhlIGluZmVyaW9yLiAg Ki8KKworICBpZiAoZS5yZWFzb24gPCAwKQorICAgIHsKKyAgICAgIGNvbnN0 IGNoYXIgKm5hbWUgPSBnZXRfZnVuY3Rpb25fbmFtZSAoZnVuYWRkciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt ZV9idWYsIHNpemVvZiAobmFtZV9idWYpKTsKKworICAgICAgZGlzY2FyZF9p bmZlcmlvcl9zdGF0dXMgKGluZl9zdGF0dXMpOworCisgICAgICAvKiBXZSBj b3VsZCBkaXNjYXJkIHRoZSBkdW1teSBmcmFtZSBoZXJlIGlmIHRoZSBwcm9n cmFtIGV4aXRlZCwKKyAgICAgICAgIGJ1dCBpdCB3aWxsIGdldCBnYXJiYWdl IGNvbGxlY3RlZCB0aGUgbmV4dCB0aW1lIHRoZSBwcm9ncmFtIGlzCisgICAg ICAgICBydW4gYW55d2F5LiAgKi8KKworICAgICAgc3dpdGNoIChlLnJlYXNv bikKKwl7CisJY2FzZSBSRVRVUk5fRVJST1I6CisJICB0aHJvd19lcnJvciAo ZS5lcnJvciwgXygiXAorJXNcblwKK0FuIGVycm9yIG9jY3VycmVkIHdoaWxl IGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLlxuXAorRXZhbHVhdGlv biBvZiB0aGUgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSBmdW5jdGlvblxu XAorKCVzKSB3aWxsIGJlIGFiYW5kb25lZC5cblwKK1doZW4gdGhlIGZ1bmN0 aW9uIGlzIGRvbmUgZXhlY3V0aW5nLCBHREIgd2lsbCBzaWxlbnRseSBzdG9w LiIpLAorCQkgICAgICAgZS5tZXNzYWdlLCBuYW1lKTsKKwljYXNlIFJFVFVS Tl9RVUlUOgorCWRlZmF1bHQ6CisJICB0aHJvd19leGNlcHRpb24gKGUpOwor CX0KKyAgICB9CisKKyAgLyogSWYgdGhlIHByb2dyYW0gaGFzIGV4aXRlZCwg b3Igd2Ugc3RvcHBlZCBhdCBhIGRpZmZlcmVudCB0aHJlYWQsCisgICAgIGV4 aXQgYW5kIGluZm9ybSB0aGUgdXNlci4gICovCisKICAgaWYgKCEgdGFyZ2V0 X2hhc19leGVjdXRpb24pCiAgICAgewotICAgICAgLyogSWYgd2UgdHJ5IHRv IHJlc3RvcmUgdGhlIGluZmVyaW9yIHN0YXR1cyAodmlhIHRoZSBjbGVhbnVw KSwKKyAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBnZXRfZnVuY3Rpb25fbmFt ZSAoZnVuYWRkciwKKwkJCQkJICAgIG5hbWVfYnVmLCBzaXplb2YgKG5hbWVf YnVmKSk7CisKKyAgICAgIC8qIElmIHdlIHRyeSB0byByZXN0b3JlIHRoZSBp bmZlcmlvciBzdGF0dXMsCiAJIHdlJ2xsIGNyYXNoIGFzIHRoZSBpbmZlcmlv ciBpcyBubyBsb25nZXIgcnVubmluZy4gICovCi0gICAgICBkaXNjYXJkX2Ns ZWFudXBzIChpbmZfc3RhdHVzX2NsZWFudXApOwogICAgICAgZGlzY2FyZF9p bmZlcmlvcl9zdGF0dXMgKGluZl9zdGF0dXMpOworCisgICAgICAvKiBXZSBj b3VsZCBkaXNjYXJkIHRoZSBkdW1teSBmcmFtZSBoZXJlIGdpdmVuIHRoYXQg dGhlIHByb2dyYW0gZXhpdGVkLAorICAgICAgICAgYnV0IGl0IHdpbGwgZ2V0 IGdhcmJhZ2UgY29sbGVjdGVkIHRoZSBuZXh0IHRpbWUgdGhlIHByb2dyYW0g aXMKKyAgICAgICAgIHJ1biBhbnl3YXkuICAqLworCiAgICAgICBlcnJvciAo XygiXAotVGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdGVkIHdoaWxl IGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLiIpKTsKK1RoZSBwcm9n cmFtIGJlaW5nIGRlYnVnZ2VkIGV4aXRlZCB3aGlsZSBpbiBhIGZ1bmN0aW9u IGNhbGxlZCBmcm9tIEdEQi5cblwKK0V2YWx1YXRpb24gb2YgdGhlIGV4cHJl c3Npb24gY29udGFpbmluZyB0aGUgZnVuY3Rpb25cblwKKyglcykgd2lsbCBi ZSBhYmFuZG9uZWQuIiksCisJICAgICBuYW1lKTsKKyAgICB9CisKKyAgaWYg KCEgcHRpZF9lcXVhbCAoY2FsbF90aHJlYWRfcHRpZCwgaW5mZXJpb3JfcHRp ZCkpCisgICAgeworICAgICAgY29uc3QgY2hhciAqbmFtZSA9IGdldF9mdW5j dGlvbl9uYW1lIChmdW5hZGRyLAorCQkJCQkgICAgbmFtZV9idWYsIHNpemVv ZiAobmFtZV9idWYpKTsKKworICAgICAgLyogV2UndmUgc3dpdGNoZWQgdGhy ZWFkcy4gIFRoaXMgY2FuIGhhcHBlbiBpZiBhbm90aGVyIHRocmVhZCBnZXRz IGEKKwkgc2lnbmFsIG9yIGJyZWFrcG9pbnQgd2hpbGUgb3VyIHRocmVhZCB3 YXMgcnVubmluZy4KKwkgVGhlcmUncyBubyBwb2ludCBpbiByZXN0b3Jpbmcg dGhlIGluZmVyaW9yIHN0YXR1cywKKwkgd2UncmUgaW4gYSBkaWZmZXJlbnQg dGhyZWFkLiAgKi8KKyAgICAgIGRpc2NhcmRfaW5mZXJpb3Jfc3RhdHVzIChp bmZfc3RhdHVzKTsKKyAgICAgIC8qIEtlZXAgdGhlIGR1bW15IGZyYW1lIHJl Y29yZCwgaWYgdGhlIHVzZXIgc3dpdGNoZXMgYmFjayB0byB0aGUKKwkgdGhy ZWFkIHdpdGggdGhlIGhhbmQtY2FsbCwgd2UnbGwgbmVlZCBpdC4gICovCisg ICAgICBpZiAoc3RvcHBlZF9ieV9yYW5kb21fc2lnbmFsKQorCWVycm9yIChf KCJcCitUaGUgcHJvZ3JhbSByZWNlaXZlZCBhIHNpZ25hbCBpbiBhbm90aGVy IHRocmVhZCB3aGlsZVxuXAorbWFraW5nIGEgZnVuY3Rpb24gY2FsbCBmcm9t IEdEQi5cblwKK0V2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY29udGFp bmluZyB0aGUgZnVuY3Rpb25cblwKKyglcykgd2lsbCBiZSBhYmFuZG9uZWQu XG5cCitXaGVuIHRoZSBmdW5jdGlvbiBpcyBkb25lIGV4ZWN1dGluZywgR0RC IHdpbGwgc2lsZW50bHkgc3RvcC4iKSwKKwkgICAgICAgbmFtZSk7CisgICAg ICBlbHNlCisJZXJyb3IgKF8oIlwKK1RoZSBwcm9ncmFtIHN0b3BwZWQgaW4g YW5vdGhlciB0aHJlYWQgd2hpbGUgbWFraW5nIGEgZnVuY3Rpb24gY2FsbCBm cm9tIEdEQi5cblwKK0V2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY29u dGFpbmluZyB0aGUgZnVuY3Rpb25cblwKKyglcykgd2lsbCBiZSBhYmFuZG9u ZWQuXG5cCitXaGVuIHRoZSBmdW5jdGlvbiBpcyBkb25lIGV4ZWN1dGluZywg R0RCIHdpbGwgc2lsZW50bHkgc3RvcC4iKSwKKwkgICAgICAgbmFtZSk7CiAg ICAgfQogCiAgIGlmIChzdG9wcGVkX2J5X3JhbmRvbV9zaWduYWwgfHwgIXN0 b3Bfc3RhY2tfZHVtbXkpCiAgICAgewotICAgICAgLyogRmluZCB0aGUgbmFt ZSBvZiB0aGUgZnVuY3Rpb24gd2UncmUgYWJvdXQgdG8gY29tcGxhaW4gYWJv dXQuICAqLwotICAgICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7Ci0gICAg ICB7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltYm9sID0gZmluZF9wY19mdW5jdGlv biAoZnVuYWRkcik7Ci0JaWYgKHN5bWJvbCkKLQkgIG5hbWUgPSBTWU1CT0xf UFJJTlRfTkFNRSAoc3ltYm9sKTsKLQllbHNlCi0JICB7Ci0JICAgIC8qIFRy eSB0aGUgbWluaW1hbCBzeW1ib2xzLiAgKi8KLQkgICAgc3RydWN0IG1pbmlt YWxfc3ltYm9sICptc3ltYm9sID0gbG9va3VwX21pbmltYWxfc3ltYm9sX2J5 X3BjIChmdW5hZGRyKTsKLQkgICAgaWYgKG1zeW1ib2wpCi0JICAgICAgbmFt ZSA9IFNZTUJPTF9QUklOVF9OQU1FIChtc3ltYm9sKTsKLQkgIH0KLQlpZiAo bmFtZSA9PSBOVUxMKQotCSAgewotCSAgICAvKiBDYW4ndCB1c2UgYSBjbGVh bnVwIGhlcmUuICBJdCBpcyBkaXNjYXJkZWQsIGluc3RlYWQgdXNlCi0gICAg ICAgICAgICAgICBhbiBhbGxvY2EuICAqLwotCSAgICBjaGFyICp0bXAgPSB4 c3RycHJpbnRmICgiYXQgJXMiLCBoZXhfc3RyaW5nIChmdW5hZGRyKSk7Ci0J ICAgIGNoYXIgKmEgPSBhbGxvY2EgKHN0cmxlbiAodG1wKSArIDEpOwotCSAg ICBzdHJjcHkgKGEsIHRtcCk7Ci0JICAgIHhmcmVlICh0bXApOwotCSAgICBu YW1lID0gYTsKLQkgIH0KLSAgICAgIH0KKyAgICAgIGNvbnN0IGNoYXIgKm5h bWUgPSBnZXRfZnVuY3Rpb25fbmFtZSAoZnVuYWRkciwKKwkJCQkJICAgIG5h bWVfYnVmLCBzaXplb2YgKG5hbWVfYnVmKSk7CisKICAgICAgIGlmIChzdG9w cGVkX2J5X3JhbmRvbV9zaWduYWwpCiAJewogCSAgLyogV2Ugc3RvcHBlZCBp bnNpZGUgdGhlIEZVTkNUSU9OIGJlY2F1c2Ugb2YgYSByYW5kb20KQEAgLTcz Nyw4ICs4NDQsMTIgQEAgVGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhp dGVkIHdoaWxlIAogCSAgICAgIC8qIFRoZSB1c2VyIHdhbnRzIHRoZSBjb250 ZXh0IHJlc3RvcmVkLiAqLwogCiAJICAgICAgLyogV2UgbXVzdCBnZXQgYmFj ayB0byB0aGUgZnJhbWUgd2Ugd2VyZSBiZWZvcmUgdGhlCi0JCSBkdW1teSBj YWxsLiAqLwotCSAgICAgIGZyYW1lX3BvcCAoZ2V0X2N1cnJlbnRfZnJhbWUg KCkpOworCQkgZHVtbXkgY2FsbC4gICovCisJICAgICAgZHVtbXlfZnJhbWVf cG9wIChkdW1teV9pZCk7CisKKwkgICAgICAvKiBXZSBhbHNvIG5lZWQgdG8g cmVzdG9yZSBpbmZlcmlvciBzdGF0dXMgdG8gdGhhdCBiZWZvcmUgdGhlCisJ CSBkdW1teSBjYWxsLiAgKi8KKwkgICAgICByZXN0b3JlX2luZmVyaW9yX3N0 YXR1cyAoaW5mX3N0YXR1cyk7CiAKIAkgICAgICAvKiBGSVhNRTogSW5zZXJ0 IGEgYnVuY2ggb2Ygd3JhcF9oZXJlOyBuYW1lIGNhbiBiZSB2ZXJ5CiAJCSBs b25nIGlmIGl0J3MgYSBDKysgbmFtZSB3aXRoIGFyZ3VtZW50cyBhbmQgc3R1 ZmYuICAqLwpAQCAtNzQ2LDQxICs4NTcsMzkgQEAgVGhlIHByb2dyYW0gYmVp bmcgZGVidWdnZWQgZXhpdGVkIHdoaWxlIAogVGhlIHByb2dyYW0gYmVpbmcg ZGVidWdnZWQgd2FzIHNpZ25hbGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2Fs bGVkIGZyb20gR0RCLlxuXAogR0RCIGhhcyByZXN0b3JlZCB0aGUgY29udGV4 dCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhlIGNhbGwuXG5cCiBUbyBjaGFu Z2UgdGhpcyBiZWhhdmlvciB1c2UgXCJzZXQgdW53aW5kb25zaWduYWwgb2Zm XCIuXG5cCi1FdmFsdWF0aW9uIG9mIHRoZSBleHByZXNzaW9uIGNvbnRhaW5p bmcgdGhlIGZ1bmN0aW9uICglcykgd2lsbCBiZSBhYmFuZG9uZWQuIiksCitF dmFsdWF0aW9uIG9mIHRoZSBleHByZXNzaW9uIGNvbnRhaW5pbmcgdGhlIGZ1 bmN0aW9uXG5cCisoJXMpIHdpbGwgYmUgYWJhbmRvbmVkLiIpLAogCQkgICAg IG5hbWUpOwogCSAgICB9CiAJICBlbHNlCiAJICAgIHsKIAkgICAgICAvKiBU aGUgdXNlciB3YW50cyB0byBzdGF5IGluIHRoZSBmcmFtZSB3aGVyZSB3ZSBz dG9wcGVkCi0gICAgICAgICAgICAgICAgIChkZWZhdWx0KS4qLwotCSAgICAg IC8qIElmIHdlIHJlc3RvcmVkIHRoZSBpbmZlcmlvciBzdGF0dXMgKHZpYSB0 aGUgY2xlYW51cCksCi0JCSB3ZSB3b3VsZCBwcmludCBhIHNwdXJpb3VzIGVy cm9yIG1lc3NhZ2UgKFVuYWJsZSB0bwotCQkgcmVzdG9yZSBwcmV2aW91c2x5 IHNlbGVjdGVkIGZyYW1lKSwgd291bGQgd3JpdGUgdGhlCi0JCSByZWdpc3Rl cnMgZnJvbSB0aGUgaW5mX3N0YXR1cyAod2hpY2ggaXMgd3JvbmcpLCBhbmQK LQkJIHdvdWxkIGRvIG90aGVyIHdyb25nIHRoaW5ncy4gICovCi0JICAgICAg ZGlzY2FyZF9jbGVhbnVwcyAoaW5mX3N0YXR1c19jbGVhbnVwKTsKKwkJIChk ZWZhdWx0KS4KKwkJIERpc2NhcmQgaW5mZXJpb3Igc3RhdHVzLCB3ZSdyZSBu b3QgYXQgdGhlIHNhbWUgcG9pbnQKKwkJIHdlIHN0YXJ0ZWQgYXQuICAqLwog CSAgICAgIGRpc2NhcmRfaW5mZXJpb3Jfc3RhdHVzIChpbmZfc3RhdHVzKTsK KwogCSAgICAgIC8qIEZJWE1FOiBJbnNlcnQgYSBidW5jaCBvZiB3cmFwX2hl cmU7IG5hbWUgY2FuIGJlIHZlcnkKIAkJIGxvbmcgaWYgaXQncyBhIEMrKyBu YW1lIHdpdGggYXJndW1lbnRzIGFuZCBzdHVmZi4gICovCiAJICAgICAgZXJy b3IgKF8oIlwKIFRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHdhcyBzaWdu YWxlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQi5cblwK IEdEQiByZW1haW5zIGluIHRoZSBmcmFtZSB3aGVyZSB0aGUgc2lnbmFsIHdh cyByZWNlaXZlZC5cblwKIFRvIGNoYW5nZSB0aGlzIGJlaGF2aW9yIHVzZSBc InNldCB1bndpbmRvbnNpZ25hbCBvblwiLlxuXAotRXZhbHVhdGlvbiBvZiB0 aGUgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSBmdW5jdGlvbiAoJXMpIHdp bGwgYmUgYWJhbmRvbmVkLiIpLAorRXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVz c2lvbiBjb250YWluaW5nIHRoZSBmdW5jdGlvblxuXAorKCVzKSB3aWxsIGJl IGFiYW5kb25lZC5cblwKK1doZW4gdGhlIGZ1bmN0aW9uIGlzIGRvbmUgZXhl Y3V0aW5nLCBHREIgd2lsbCBzaWxlbnRseSBzdG9wLiIpLAogCQkgICAgIG5h bWUpOwogCSAgICB9CiAJfQogCiAgICAgICBpZiAoIXN0b3Bfc3RhY2tfZHVt bXkpCiAJewotCSAgLyogV2UgaGl0IGEgYnJlYWtwb2ludCBpbnNpZGUgdGhl IEZVTkNUSU9OLiAqLwotCSAgLyogSWYgd2UgcmVzdG9yZWQgdGhlIGluZmVy aW9yIHN0YXR1cyAodmlhIHRoZSBjbGVhbnVwKSwgd2UKLQkgICAgIHdvdWxk IHByaW50IGEgc3B1cmlvdXMgZXJyb3IgbWVzc2FnZSAoVW5hYmxlIHRvIHJl c3RvcmUKLQkgICAgIHByZXZpb3VzbHkgc2VsZWN0ZWQgZnJhbWUpLCB3b3Vs ZCB3cml0ZSB0aGUgcmVnaXN0ZXJzCi0JICAgICBmcm9tIHRoZSBpbmZfc3Rh dHVzICh3aGljaCBpcyB3cm9uZyksIGFuZCB3b3VsZCBkbyBvdGhlcgotCSAg ICAgd3JvbmcgdGhpbmdzLiAgKi8KLQkgIGRpc2NhcmRfY2xlYW51cHMgKGlu Zl9zdGF0dXNfY2xlYW51cCk7CisJICAvKiBXZSBoaXQgYSBicmVha3BvaW50 IGluc2lkZSB0aGUgRlVOQ1RJT04uCisJICAgICBLZWVwIHRoZSBkdW1teSBm cmFtZSwgdGhlIHVzZXIgbWF5IHdhbnQgdG8gZXhhbWluZSBpdHMgc3RhdGUu CisJICAgICBEaXNjYXJkIGluZmVyaW9yIHN0YXR1cywgd2UncmUgbm90IGF0 IHRoZSBzYW1lIHBvaW50CisJICAgICB3ZSBzdGFydGVkIGF0LiAgKi8KIAkg IGRpc2NhcmRfaW5mZXJpb3Jfc3RhdHVzIChpbmZfc3RhdHVzKTsKKwogCSAg LyogVGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlIHVzZWQgdG8gc2F5ICJU aGUgZXhwcmVzc2lvbgogCSAgICAgd2hpY2ggY29udGFpbmVkIHRoZSBmdW5j dGlvbiBjYWxsIGhhcyBiZWVuIGRpc2NhcmRlZC4iCiAJICAgICBJdCBpcyBh IGhhcmQgY29uY2VwdCB0byBleHBsYWluIGluIGEgZmV3IHdvcmRzLiAgSWRl YWxseSwKQEAgLTc5MSwyOCArOTAwLDMyIEBAIEV2YWx1YXRpb24gb2YgdGhl IGV4cHJlc3Npb24gY29udGFpbmluZyAKIAkgICAgIGEgQysrIG5hbWUgd2l0 aCBhcmd1bWVudHMgYW5kIHN0dWZmLiAgKi8KIAkgIGVycm9yIChfKCJcCiBU aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBzdG9wcGVkIHdoaWxlIGluIGEg ZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLlxuXAotV2hlbiB0aGUgZnVuY3Rp b24gKCVzKSBpcyBkb25lIGV4ZWN1dGluZywgR0RCIHdpbGwgc2lsZW50bHlc blwKLXN0b3AgKGluc3RlYWQgb2YgY29udGludWluZyB0byBldmFsdWF0ZSB0 aGUgZXhwcmVzc2lvbiBjb250YWluaW5nXG5cCi10aGUgZnVuY3Rpb24gY2Fs bCkuIiksIG5hbWUpOworRXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBj b250YWluaW5nIHRoZSBmdW5jdGlvblxuXAorKCVzKSB3aWxsIGJlIGFiYW5k b25lZC5cblwKK1doZW4gdGhlIGZ1bmN0aW9uIGlzIGRvbmUgZXhlY3V0aW5n LCBHREIgd2lsbCBzaWxlbnRseSBzdG9wLiIpLAorCQkgbmFtZSk7CiAJfQog CiAgICAgICAvKiBUaGUgYWJvdmUgY29kZSBlcnJvcnMgb3V0LCBzbyAuLi4g ICovCiAgICAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9f LCBfKCIuLi4gc2hvdWxkIG5vdCBiZSBoZXJlIikpOwogICAgIH0KIAotICAv KiBJZiB3ZSBnZXQgaGVyZSB0aGUgY2FsbGVkIEZVTkNUSU9OIHJ1biB0byBj b21wbGV0aW9uLiAqLworICAvKiBJZiB3ZSBnZXQgaGVyZSB0aGUgY2FsbGVk IEZVTkNUSU9OIHJhbiB0byBjb21wbGV0aW9uLAorICAgICBhbmQgdGhlIGR1 bW15IGZyYW1lIGhhcyBhbHJlYWR5IGJlZW4gcG9wcGVkLiAgKi8KIAotICAv KiBPbiBub3JtYWwgcmV0dXJuLCB0aGUgc3RhY2sgZHVtbXkgaGFzIGJlZW4g cG9wcGVkIGFscmVhZHkuICAqLwotICByZWdjYWNoZV9jcHlfbm9fcGFzc3Ro cm91Z2ggKHJldGJ1Ziwgc3RvcF9yZWdpc3RlcnMpOwotCi0gIC8qIFJlc3Rv cmUgdGhlIGluZmVyaW9yIHN0YXR1cywgdmlhIGl0cyBjbGVhbnVwLiAgQXQg dGhpcyBzdGFnZSwKLSAgICAgbGVhdmUgdGhlIFJFVEJVRiBhbG9uZS4gICov Ci0gIGRvX2NsZWFudXBzIChpbmZfc3RhdHVzX2NsZWFudXApOwotCi0gIC8q IEZpZ3VyZSBvdXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlv bi4gICovCiAgIHsKKyAgICBzdHJ1Y3QgcmVnY2FjaGUgKnJldGJ1ZiA9IHJl Z2NhY2hlX3htYWxsb2MgKGdkYmFyY2gpOworICAgIHN0cnVjdCBjbGVhbnVw ICpyZXRidWZfY2xlYW51cCA9IG1ha2VfY2xlYW51cF9yZWdjYWNoZV94ZnJl ZSAocmV0YnVmKTsKICAgICBzdHJ1Y3QgdmFsdWUgKnJldHZhbCA9IE5VTEw7 CiAKKyAgICByZWdjYWNoZV9jcHlfbm9fcGFzc3Rocm91Z2ggKHJldGJ1Ziwg c3RvcF9yZWdpc3RlcnMpOworCisgICAgLyogSW5mZXJpb3IgY2FsbCBpcyBz dWNjZXNzZnVsLiAgUmVzdG9yZSB0aGUgaW5mZXJpb3Igc3RhdHVzLgorICAg ICAgIEF0IHRoaXMgc3RhZ2UsIGxlYXZlIHRoZSBSRVRCVUYgYWxvbmUuICAq LworICAgIHJlc3RvcmVfaW5mZXJpb3Jfc3RhdHVzIChpbmZfc3RhdHVzKTsK KworICAgIC8qIEZpZ3VyZSBvdXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRo ZSBmdW5jdGlvbi4gICovCisKICAgICBpZiAobGFuZ19zdHJ1Y3RfcmV0dXJu KQogICAgICAgcmV0dmFsID0gdmFsdWVfYXQgKHZhbHVlc190eXBlLCBzdHJ1 Y3RfYWRkcik7CiAgICAgZWxzZSBpZiAoVFlQRV9DT0RFICh0YXJnZXRfdmFs dWVzX3R5cGUpID09IFRZUEVfQ09ERV9WT0lEKQpAQCAtODQxLDcgKzk1NCw3 IEBAIHRoZSBmdW5jdGlvbiBjYWxsKS4iKSwgbmFtZSk7CiAKICAgICBkb19j bGVhbnVwcyAocmV0YnVmX2NsZWFudXApOwogCi0gICAgZ2RiX2Fzc2VydChy ZXR2YWwpOworICAgIGdkYl9hc3NlcnQgKHJldHZhbCk7CiAgICAgcmV0dXJu IHJldHZhbDsKICAgfQogfQpJbmRleDogaW5mZXJpb3IuaAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2luZmVy aW9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE4CmRpZmYgLXUgLXAg LXUgLXAgLXIxLjExOCBpbmZlcmlvci5oCi0tLSBpbmZlcmlvci5oCTMgSmFu IDIwMDkgMDU6NTc6NTIgLTAwMDAJMS4xMTgKKysrIGluZmVyaW9yLmgJMTkg SmFuIDIwMDkgMDE6MDg6NDYgLTAwMDAKQEAgLTQwLDI0ICs0MCwzOCBAQCBz dHJ1Y3QgdWlfb3V0OwogLyogRm9yIHN0cnVjdCBmcmFtZV9pZC4gICovCiAj aW5jbHVkZSAiZnJhbWUuaCIKIAotLyogU3RydWN0dXJlIGluIHdoaWNoIHRv IHNhdmUgdGhlIHN0YXR1cyBvZiB0aGUgaW5mZXJpb3IuICBDcmVhdGUvU2F2 ZQotICAgdGhyb3VnaCAic2F2ZV9pbmZlcmlvcl9zdGF0dXMiLCByZXN0b3Jl IHRocm91Z2gKLSAgICJyZXN0b3JlX2luZmVyaW9yX3N0YXR1cyIuCi0KLSAg IFRoaXMgcGFpciBvZiByb3V0aW5lcyBzaG91bGQgYmUgY2FsbGVkIGFyb3Vu ZCBhbnkgdHJhbnNmZXIgb2YKLSAgIGNvbnRyb2wgdG8gdGhlIGluZmVyaW9y IHdoaWNoIHlvdSBkb24ndCB3YW50IHNob3dpbmcgdXAgaW4geW91cgotICAg Y29udHJvbCB2YXJpYWJsZXMuICAqLworLyogVHdvIHN0cnVjdHVyZXMgYXJl IHVzZWQgdG8gcmVjb3JkIGluZmVyaW9yIHN0YXRlLgogCisgICBpbmZlcmlv cl90aHJlYWRfc3RhdGUgY29udGFpbnMgc3RhdGUgYWJvdXQgdGhlIHByb2dy YW0gaXRzZWxmIGxpa2UgaXRzCisgICByZWdpc3RlcnMgYW5kIGFueSBzaWdu YWwgaXQgcmVjZWl2ZWQgd2hlbiBpdCBsYXN0IHN0b3BwZWQuCisgICBUaGlz IHN0YXRlIG11c3QgYmUgcmVzdG9yZWQgcmVnYXJkbGVzcyBvZiBob3cgdGhl IGluZmVyaW9yIGZ1bmN0aW9uIGNhbGwKKyAgIGVuZHMgKGVpdGhlciBzdWNj ZXNzZnVsbHksIG9yIGFmdGVyIGl0IGhpdHMgYSBicmVha3BvaW50IG9yIHNp Z25hbCkKKyAgIGlmIHRoZSBwcm9ncmFtIGlzIHRvIHByb3Blcmx5IGNvbnRp bnVlIHdoZXJlIGl0IGxlZnQgb2ZmLgorCisgICBpbmZlcmlvcl9zdGF0dXMg Y29udGFpbnMgc3RhdGUgcmVnYXJkaW5nIGdkYidzIGNvbnRyb2wgb2YgdGhl IGluZmVyaW9yCisgICBpdHNlbGYgbGlrZSBzdGVwcGluZyBjb250cm9sLiAg SXQgYWxzbyBjb250YWlucyBzZXNzaW9uIHN0YXRlIGxpa2UgdGhlCisgICB1 c2VyJ3MgY3VycmVudGx5IHNlbGVjdGVkIGZyYW1lLgorCisgICBDYWxsIHRo ZXNlIHJvdXRpbmVzIGFyb3VuZCBoYW5kIGNhbGxlZCBmdW5jdGlvbnMsIGlu Y2x1ZGluZyBmdW5jdGlvbiBjYWxscworICAgaW4gY29uZGl0aW9uYWwgYnJl YWtwb2ludHMgZm9yIGV4YW1wbGUuICAqLworCitzdHJ1Y3QgaW5mZXJpb3Jf dGhyZWFkX3N0YXRlOwogc3RydWN0IGluZmVyaW9yX3N0YXR1czsKIAotZXh0 ZXJuIHN0cnVjdCBpbmZlcmlvcl9zdGF0dXMgKnNhdmVfaW5mZXJpb3Jfc3Rh dHVzIChpbnQpOworZXh0ZXJuIHN0cnVjdCBpbmZlcmlvcl90aHJlYWRfc3Rh dGUgKnNhdmVfaW5mZXJpb3JfdGhyZWFkX3N0YXRlICh2b2lkKTsKK2V4dGVy biBzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzICpzYXZlX2luZmVyaW9yX3N0YXR1 cyAodm9pZCk7CiAKK2V4dGVybiB2b2lkIHJlc3RvcmVfaW5mZXJpb3JfdGhy ZWFkX3N0YXRlIChzdHJ1Y3QgaW5mZXJpb3JfdGhyZWFkX3N0YXRlICopOwog ZXh0ZXJuIHZvaWQgcmVzdG9yZV9pbmZlcmlvcl9zdGF0dXMgKHN0cnVjdCBp bmZlcmlvcl9zdGF0dXMgKik7CiAKK2V4dGVybiBzdHJ1Y3QgY2xlYW51cCAq bWFrZV9jbGVhbnVwX3Jlc3RvcmVfaW5mZXJpb3JfdGhyZWFkX3N0YXRlIChz dHJ1Y3QgaW5mZXJpb3JfdGhyZWFkX3N0YXRlICopOwogZXh0ZXJuIHN0cnVj dCBjbGVhbnVwICptYWtlX2NsZWFudXBfcmVzdG9yZV9pbmZlcmlvcl9zdGF0 dXMgKHN0cnVjdCBpbmZlcmlvcl9zdGF0dXMgKik7CiAKK2V4dGVybiB2b2lk IGRpc2NhcmRfaW5mZXJpb3JfdGhyZWFkX3N0YXRlIChzdHJ1Y3QgaW5mZXJp b3JfdGhyZWFkX3N0YXRlICopOwogZXh0ZXJuIHZvaWQgZGlzY2FyZF9pbmZl cmlvcl9zdGF0dXMgKHN0cnVjdCBpbmZlcmlvcl9zdGF0dXMgKik7CiAKK2V4 dGVybiBzdHJ1Y3QgcmVnY2FjaGUgKmdldF9pbmZlcmlvcl90aHJlYWRfc3Rh dGVfcmVnY2FjaGUgKHN0cnVjdCBpbmZlcmlvcl90aHJlYWRfc3RhdGUgKik7 CisKIC8qIFRoZSAtMSBwdGlkLCBvZnRlbiB1c2VkIHRvIGluZGljYXRlIGVp dGhlciBhbiBlcnJvciBjb25kaXRpb24KICAgIG9yIGEgImRvbid0IGNhcmUi IGNvbmRpdGlvbiwgaS5lLCAicnVuIGFsbCB0aHJlYWRzLiIgICovCiBleHRl cm4gcHRpZF90IG1pbnVzX29uZV9wdGlkOwpJbmRleDogaW5mcnVuLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dk Yi9pbmZydW4uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNTIKZGlmZiAt dSAtcCAtdSAtcCAtcjEuMzUyIGluZnJ1bi5jCi0tLSBpbmZydW4uYwkxOCBK YW4gMjAwOSAxNzo0MjoxNiAtMDAwMAkxLjM1MgorKysgaW5mcnVuLmMJMTkg SmFuIDIwMDkgMDE6MDg6NDcgLTAwMDAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNp bmNsdWRlICJsYW5ndWFnZS5oIgogI2luY2x1ZGUgInNvbGliLmgiCiAjaW5j bHVkZSAibWFpbi5oIgotCiAjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgogI2lu Y2x1ZGUgIm1pL21pLWNvbW1vbi5oIgogI2luY2x1ZGUgImV2ZW50LXRvcC5o IgpAQCAtNDM4NywxNCArNDM4NiwyMCBAQCBGdXJ0aGVyIGV4ZWN1dGlvbiBp cyBwcm9iYWJseSBpbXBvc3NpYmxlCiAKICAgaWYgKHN0b3Bfc3RhY2tfZHVt bXkpCiAgICAgewotICAgICAgLyogUG9wIHRoZSBlbXB0eSBmcmFtZSB0aGF0 IGNvbnRhaW5zIHRoZSBzdGFjayBkdW1teS4gIFBPUF9GUkFNRQotICAgICAg ICAgZW5kcyB3aXRoIGEgc2V0dGluZyBvZiB0aGUgY3VycmVudCBmcmFtZSwg c28gd2UgY2FuIHVzZSB0aGF0Ci0gICAgICAgICBuZXh0LiAqLwotICAgICAg ZnJhbWVfcG9wIChnZXRfY3VycmVudF9mcmFtZSAoKSk7Ci0gICAgICAvKiBT ZXQgc3RvcF9wYyB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgY2FsbGVkIHRo ZSBmdW5jdGlvbi4KLSAgICAgICAgIENhbid0IHJlbHkgb24gcmVzdG9yZV9p bmZlcmlvcl9zdGF0dXMgYmVjYXVzZSB0aGF0IG9ubHkgZ2V0cwotICAgICAg ICAgY2FsbGVkIGlmIHdlIGRvbid0IHN0b3AgaW4gdGhlIGNhbGxlZCBmdW5j dGlvbi4gICovCi0gICAgICBzdG9wX3BjID0gcmVhZF9wYyAoKTsKKyAgICAg IC8qIFBvcCB0aGUgZW1wdHkgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgc3Rh Y2sgZHVtbXkuCisJIFRoaXMgYWxzbyByZXN0b3JlcyBpbmZlcmlvciBzdGF0 ZSBwcmlvciB0byB0aGUgY2FsbAorCSAoc3RydWN0IGluZmVyaW9yX3RocmVh ZF9zdGF0ZSkuICAqLworICAgICAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1l ID0gZ2V0X2N1cnJlbnRfZnJhbWUgKCk7CisgICAgICBnZGJfYXNzZXJ0IChn ZXRfZnJhbWVfdHlwZSAoZnJhbWUpID09IERVTU1ZX0ZSQU1FKTsKKyAgICAg IGZyYW1lX3BvcCAoZnJhbWUpOworICAgICAgLyogZnJhbWVfcG9wKCkgY2Fs bHMgcmVpbml0X2ZyYW1lX2NhY2hlIGFzIHRoZSBsYXN0IHRoaW5nIGl0IGRv ZXMKKwkgd2hpY2ggbWVhbnMgdGhlcmUncyBjdXJyZW50bHkgbm8gc2VsZWN0 ZWQgZnJhbWUuICBXZSBkb24ndCBuZWVkCisJIHRvIHJlLWVzdGFibGlzaCBh IHNlbGVjdGVkIGZyYW1lIGlmIHRoZSBkdW1teSBjYWxsIHJldHVybnMgbm9y bWFsbHksCisJIHRoYXQgd2lsbCBiZSBkb25lIGJ5IHJlc3RvcmVfaW5mZXJp b3Jfc3RhdHVzLiAgSG93ZXZlciwgd2UgZG8gaGF2ZQorCSB0byBoYW5kbGUg dGhlIGNhc2Ugd2hlcmUgdGhlIGR1bW15IGNhbGwgaXMgcmV0dXJuaW5nIGFm dGVyIGJlaW5nCisJIHN0b3BwZWQgKGUuZy4gdGhlIGR1bW15IGNhbGwgcHJl dmlvdXNseSBoaXQgYSBicmVha3BvaW50KS4gIFdlCisJIGNhbid0IGtub3cg d2hpY2ggY2FzZSB3ZSBoYXZlIHNvIGp1c3QgYWx3YXlzIHJlLWVzdGFibGlz aCBhCisJIHNlbGVjdGVkIGZyYW1lIGhlcmUuICAqLwogICAgICAgc2VsZWN0 X2ZyYW1lIChnZXRfY3VycmVudF9mcmFtZSAoKSk7CiAgICAgfQogCkBAIC00 NzkyLDEwICs0Nzk3LDg1IEBAIHNpZ25hbHNfaW5mbyAoY2hhciAqc2lnbnVt X2V4cCwgaW50IGZyb20KICAgcHJpbnRmX2ZpbHRlcmVkIChfKCJcblVzZSB0 aGUgXCJoYW5kbGVcIiBjb21tYW5kIHRvIGNoYW5nZSB0aGVzZSB0YWJsZXMu XG4iKSk7CiB9CiAMCi1zdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzCisvKiBJbmZl cmlvciB0aHJlYWQgc3RhdGUuCisgICBUaGVzZSBhcmUgZGV0YWlscyByZWxh dGVkIHRvIHRoZSBpbmZlcmlvciBpdHNlbGYsIGFuZCBkb24ndCBpbmNsdWRl CisgICB0aGluZ3MgbGlrZSB3aGF0IGZyYW1lIHRoZSB1c2VyIGhhZCBzZWxl Y3RlZCBvciB3aGF0IGdkYiB3YXMgZG9pbmcKKyAgIHdpdGggdGhlIHRhcmdl dCBhdCB0aGUgdGltZS4KKyAgIEZvciBpbmZlcmlvciBmdW5jdGlvbiBjYWxs cyB0aGVzZSBhcmUgdGhpbmdzIHdlIHdhbnQgdG8gcmVzdG9yZQorICAgcmVn YXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBmdW5jdGlvbiBjYWxsIHN1Y2Nlc3Nm dWxseSBjb21wbGV0ZXMKKyAgIG9yIHRoZSBkdW1teSBmcmFtZSBoYXMgdG8g YmUgbWFudWFsbHkgcG9wcGVkLiAgKi8KKworc3RydWN0IGluZmVyaW9yX3Ro cmVhZF9zdGF0ZQogewogICBlbnVtIHRhcmdldF9zaWduYWwgc3RvcF9zaWdu YWw7CiAgIENPUkVfQUREUiBzdG9wX3BjOworICBzdHJ1Y3QgcmVnY2FjaGUg KnJlZ2lzdGVyczsKK307CisKK3N0cnVjdCBpbmZlcmlvcl90aHJlYWRfc3Rh dGUgKgorc2F2ZV9pbmZlcmlvcl90aHJlYWRfc3RhdGUgKHZvaWQpCit7Cisg IHN0cnVjdCBpbmZlcmlvcl90aHJlYWRfc3RhdGUgKmluZl9zdGF0ZSA9IFhN QUxMT0MgKHN0cnVjdCBpbmZlcmlvcl90aHJlYWRfc3RhdGUpOworICBzdHJ1 Y3QgdGhyZWFkX2luZm8gKnRwID0gaW5mZXJpb3JfdGhyZWFkICgpOworCisg IGluZl9zdGF0ZS0+c3RvcF9zaWduYWwgPSB0cC0+c3RvcF9zaWduYWw7Cisg IGluZl9zdGF0ZS0+c3RvcF9wYyA9IHN0b3BfcGM7CisKKyAgaW5mX3N0YXRl LT5yZWdpc3RlcnMgPSByZWdjYWNoZV9kdXAgKGdldF9jdXJyZW50X3JlZ2Nh Y2hlICgpKTsKKworICByZXR1cm4gaW5mX3N0YXRlOworfQorCisvKiBSZXN0 b3JlIGluZmVyaW9yIHNlc3Npb24gc3RhdGUgdG8gSU5GX1NUQVRFLiAgKi8K Kwordm9pZAorcmVzdG9yZV9pbmZlcmlvcl90aHJlYWRfc3RhdGUgKHN0cnVj dCBpbmZlcmlvcl90aHJlYWRfc3RhdGUgKmluZl9zdGF0ZSkKK3sKKyAgc3Ry dWN0IHRocmVhZF9pbmZvICp0cCA9IGluZmVyaW9yX3RocmVhZCAoKTsKKwor ICB0cC0+c3RvcF9zaWduYWwgPSBpbmZfc3RhdGUtPnN0b3Bfc2lnbmFsOwor ICBzdG9wX3BjID0gaW5mX3N0YXRlLT5zdG9wX3BjOworCisgIC8qIFRoZSBp bmZlcmlvciBjYW4gYmUgZ29uZSBpZiB0aGUgdXNlciB0eXBlcyAicHJpbnQg ZXhpdCgwKSIKKyAgICAgKGFuZCBwZXJoYXBzIG90aGVyIHRpbWVzKS4gICov CisgIGlmICh0YXJnZXRfaGFzX2V4ZWN1dGlvbikKKyAgICAvKiBOQjogVGhl IHJlZ2lzdGVyIHdyaXRlIGdvZXMgdGhyb3VnaCB0byB0aGUgdGFyZ2V0LiAg Ki8KKyAgICByZWdjYWNoZV9jcHkgKGdldF9jdXJyZW50X3JlZ2NhY2hlICgp LCBpbmZfc3RhdGUtPnJlZ2lzdGVycyk7CisgIHJlZ2NhY2hlX3hmcmVlIChp bmZfc3RhdGUtPnJlZ2lzdGVycyk7CisgIHhmcmVlIChpbmZfc3RhdGUpOwor fQorCitzdGF0aWMgdm9pZAorZG9fcmVzdG9yZV9pbmZlcmlvcl90aHJlYWRf c3RhdGVfY2xlYW51cCAodm9pZCAqc3RhdGUpCit7CisgIHJlc3RvcmVfaW5m ZXJpb3JfdGhyZWFkX3N0YXRlIChzdGF0ZSk7Cit9CisKK3N0cnVjdCBjbGVh bnVwICoKK21ha2VfY2xlYW51cF9yZXN0b3JlX2luZmVyaW9yX3RocmVhZF9z dGF0ZSAoc3RydWN0IGluZmVyaW9yX3RocmVhZF9zdGF0ZSAqaW5mX3N0YXRl KQoreworICByZXR1cm4gbWFrZV9jbGVhbnVwIChkb19yZXN0b3JlX2luZmVy aW9yX3RocmVhZF9zdGF0ZV9jbGVhbnVwLCBpbmZfc3RhdGUpOworfQorCit2 b2lkCitkaXNjYXJkX2luZmVyaW9yX3RocmVhZF9zdGF0ZSAoc3RydWN0IGlu ZmVyaW9yX3RocmVhZF9zdGF0ZSAqaW5mX3N0YXRlKQoreworICByZWdjYWNo ZV94ZnJlZSAoaW5mX3N0YXRlLT5yZWdpc3RlcnMpOworICB4ZnJlZSAoaW5m X3N0YXRlKTsKK30KKworc3RydWN0IHJlZ2NhY2hlICoKK2dldF9pbmZlcmlv cl90aHJlYWRfc3RhdGVfcmVnY2FjaGUgKHN0cnVjdCBpbmZlcmlvcl90aHJl YWRfc3RhdGUgKmluZl9zdGF0ZSkKK3sKKyAgcmV0dXJuIGluZl9zdGF0ZS0+ cmVnaXN0ZXJzOworfQorCisvKiBTZXNzaW9uIHJlbGF0ZWQgc3RhdGUgZm9y IGluZmVyaW9yIGZ1bmN0aW9uIGNhbGxzLgorICAgVGhlc2UgYXJlIHRoZSBh ZGRpdGlvbmFsIGJpdHMgb2Ygc3RhdGUgdGhhdCBuZWVkIHRvIGJlIHJlc3Rv cmVkCisgICB3aGVuIGFuIGluZmVyaW9yIGZ1bmN0aW9uIGNhbGwgc3VjY2Vz c2Z1bGx5IGNvbXBsZXRlcy4gICovCisKK3N0cnVjdCBpbmZlcmlvcl9zdGF0 dXMKK3sKICAgYnBzdGF0IHN0b3BfYnBzdGF0OwogICBpbnQgc3RvcF9zdGVw OwogICBpbnQgc3RvcF9zdGFja19kdW1teTsKQEAgLTQ4MDksMzIgKzQ4ODks MjMgQEAgc3RydWN0IGluZmVyaW9yX3N0YXR1cwogICBpbnQgc3RvcF9hZnRl cl90cmFwOwogICBpbnQgc3RvcF9zb29uOwogCi0gIC8qIFRoZXNlIGFyZSBo ZXJlIGJlY2F1c2UgaWYgY2FsbF9mdW5jdGlvbl9ieV9oYW5kIGhhcyB3cml0 dGVuIHNvbWUKLSAgICAgcmVnaXN0ZXJzIGFuZCB0aGVuIGRlY2lkZXMgdG8g Y2FsbCBlcnJvcigpLCB3ZSBiZXR0ZXIgbm90IGhhdmUgY2hhbmdlZAotICAg ICBhbnkgcmVnaXN0ZXJzLiAgKi8KLSAgc3RydWN0IHJlZ2NhY2hlICpyZWdp c3RlcnM7Ci0KLSAgLyogQSBmcmFtZSB1bmlxdWUgaWRlbnRpZmllci4gICov CisgIC8qIElEIGlmIHRoZSBzZWxlY3RlZCBmcmFtZSB3aGVuIHRoZSBpbmZl cmlvciBmdW5jdGlvbiBjYWxsIHdhcyBtYWRlLiAgKi8KICAgc3RydWN0IGZy YW1lX2lkIHNlbGVjdGVkX2ZyYW1lX2lkOwogCiAgIGludCBicmVha3BvaW50 X3Byb2NlZWRlZDsKLSAgaW50IHJlc3RvcmVfc3RhY2tfaW5mbzsKICAgaW50 IHByb2NlZWRfdG9fZmluaXNoOwogfTsKIAogLyogU2F2ZSBhbGwgb2YgdGhl IGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5mZXJpb3I8PT0+ Z2RiCi0gICBjb25uZWN0aW9uLiAgSU5GX1NUQVRVUyBpcyBhIHBvaW50ZXIg dG8gYSAic3RydWN0IGluZmVyaW9yX3N0YXR1cyIKLSAgIChkZWZpbmVkIGlu IGluZmVyaW9yLmgpLiAgKi8KKyAgIGNvbm5lY3Rpb24uICAqLwogCiBzdHJ1 Y3QgaW5mZXJpb3Jfc3RhdHVzICoKLXNhdmVfaW5mZXJpb3Jfc3RhdHVzIChp bnQgcmVzdG9yZV9zdGFja19pbmZvKQorc2F2ZV9pbmZlcmlvcl9zdGF0dXMg KHZvaWQpCiB7CiAgIHN0cnVjdCBpbmZlcmlvcl9zdGF0dXMgKmluZl9zdGF0 dXMgPSBYTUFMTE9DIChzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzKTsKICAgc3Ry dWN0IHRocmVhZF9pbmZvICp0cCA9IGluZmVyaW9yX3RocmVhZCAoKTsKICAg c3RydWN0IGluZmVyaW9yICppbmYgPSBjdXJyZW50X2luZmVyaW9yICgpOwog Ci0gIGluZl9zdGF0dXMtPnN0b3Bfc2lnbmFsID0gdHAtPnN0b3Bfc2lnbmFs OwotICBpbmZfc3RhdHVzLT5zdG9wX3BjID0gc3RvcF9wYzsKICAgaW5mX3N0 YXR1cy0+c3RvcF9zdGVwID0gdHAtPnN0b3Bfc3RlcDsKICAgaW5mX3N0YXR1 cy0+c3RvcF9zdGFja19kdW1teSA9IHN0b3Bfc3RhY2tfZHVtbXk7CiAgIGlu Zl9zdGF0dXMtPnN0b3BwZWRfYnlfcmFuZG9tX3NpZ25hbCA9IHN0b3BwZWRf YnlfcmFuZG9tX3NpZ25hbDsKQEAgLTQ4NTIsMTIgKzQ5MjMsMTAgQEAgc2F2 ZV9pbmZlcmlvcl9zdGF0dXMgKGludCByZXN0b3JlX3N0YWNrXwogICBpbmZf c3RhdHVzLT5zdG9wX2Jwc3RhdCA9IHRwLT5zdG9wX2Jwc3RhdDsKICAgdHAt PnN0b3BfYnBzdGF0ID0gYnBzdGF0X2NvcHkgKHRwLT5zdG9wX2Jwc3RhdCk7 CiAgIGluZl9zdGF0dXMtPmJyZWFrcG9pbnRfcHJvY2VlZGVkID0gYnJlYWtw b2ludF9wcm9jZWVkZWQ7Ci0gIGluZl9zdGF0dXMtPnJlc3RvcmVfc3RhY2tf aW5mbyA9IHJlc3RvcmVfc3RhY2tfaW5mbzsKICAgaW5mX3N0YXR1cy0+cHJv Y2VlZF90b19maW5pc2ggPSB0cC0+cHJvY2VlZF90b19maW5pc2g7CiAKLSAg aW5mX3N0YXR1cy0+cmVnaXN0ZXJzID0gcmVnY2FjaGVfZHVwIChnZXRfY3Vy cmVudF9yZWdjYWNoZSAoKSk7Ci0KICAgaW5mX3N0YXR1cy0+c2VsZWN0ZWRf ZnJhbWVfaWQgPSBnZXRfZnJhbWVfaWQgKGdldF9zZWxlY3RlZF9mcmFtZSAo TlVMTCkpOworCiAgIHJldHVybiBpbmZfc3RhdHVzOwogfQogCkBAIC00ODgy LDE0ICs0OTUxLDE0IEBAIHJlc3RvcmVfc2VsZWN0ZWRfZnJhbWUgKHZvaWQg KmFyZ3MpCiAgIHJldHVybiAoMSk7CiB9CiAKKy8qIFJlc3RvcmUgaW5mZXJp b3Igc2Vzc2lvbiBzdGF0ZSB0byBJTkZfU1RBVFVTLiAgKi8KKwogdm9pZAog cmVzdG9yZV9pbmZlcmlvcl9zdGF0dXMgKHN0cnVjdCBpbmZlcmlvcl9zdGF0 dXMgKmluZl9zdGF0dXMpCiB7CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHAg PSBpbmZlcmlvcl90aHJlYWQgKCk7CiAgIHN0cnVjdCBpbmZlcmlvciAqaW5m ID0gY3VycmVudF9pbmZlcmlvciAoKTsKIAotICB0cC0+c3RvcF9zaWduYWwg PSBpbmZfc3RhdHVzLT5zdG9wX3NpZ25hbDsKLSAgc3RvcF9wYyA9IGluZl9z dGF0dXMtPnN0b3BfcGM7CiAgIHRwLT5zdG9wX3N0ZXAgPSBpbmZfc3RhdHVz LT5zdG9wX3N0ZXA7CiAgIHN0b3Bfc3RhY2tfZHVtbXkgPSBpbmZfc3RhdHVz LT5zdG9wX3N0YWNrX2R1bW15OwogICBzdG9wcGVkX2J5X3JhbmRvbV9zaWdu YWwgPSBpbmZfc3RhdHVzLT5zdG9wcGVkX2J5X3JhbmRvbV9zaWduYWw7CkBA IC00OTAyLDI0ICs0OTcxLDExIEBAIHJlc3RvcmVfaW5mZXJpb3Jfc3RhdHVz IChzdHJ1Y3QgaW5mZXJpb3IKICAgaW5mLT5zdG9wX3Nvb24gPSBpbmZfc3Rh dHVzLT5zdG9wX3Nvb247CiAgIGJwc3RhdF9jbGVhciAoJnRwLT5zdG9wX2Jw c3RhdCk7CiAgIHRwLT5zdG9wX2Jwc3RhdCA9IGluZl9zdGF0dXMtPnN0b3Bf YnBzdGF0OworICBpbmZfc3RhdHVzLT5zdG9wX2Jwc3RhdCA9IE5VTEw7CiAg IGJyZWFrcG9pbnRfcHJvY2VlZGVkID0gaW5mX3N0YXR1cy0+YnJlYWtwb2lu dF9wcm9jZWVkZWQ7CiAgIHRwLT5wcm9jZWVkX3RvX2ZpbmlzaCA9IGluZl9z dGF0dXMtPnByb2NlZWRfdG9fZmluaXNoOwogCi0gIC8qIFRoZSBpbmZlcmlv ciBjYW4gYmUgZ29uZSBpZiB0aGUgdXNlciB0eXBlcyAicHJpbnQgZXhpdCgw KSIKLSAgICAgKGFuZCBwZXJoYXBzIG90aGVyIHRpbWVzKS4gICovCi0gIGlm ICh0YXJnZXRfaGFzX2V4ZWN1dGlvbikKLSAgICAvKiBOQjogVGhlIHJlZ2lz dGVyIHdyaXRlIGdvZXMgdGhyb3VnaCB0byB0aGUgdGFyZ2V0LiAgKi8KLSAg ICByZWdjYWNoZV9jcHkgKGdldF9jdXJyZW50X3JlZ2NhY2hlICgpLCBpbmZf c3RhdHVzLT5yZWdpc3RlcnMpOwotICByZWdjYWNoZV94ZnJlZSAoaW5mX3N0 YXR1cy0+cmVnaXN0ZXJzKTsKLQotICAvKiBGSVhNRTogSWYgd2UgYXJlIGJl aW5nIGNhbGxlZCBhZnRlciBzdG9wcGluZyBpbiBhIGZ1bmN0aW9uIHdoaWNo Ci0gICAgIGlzIGNhbGxlZCBmcm9tIGdkYiwgd2Ugc2hvdWxkIG5vdCBiZSB0 cnlpbmcgdG8gcmVzdG9yZSB0aGUKLSAgICAgc2VsZWN0ZWQgZnJhbWU7IGl0 IGp1c3QgcHJpbnRzIGEgc3B1cmlvdXMgZXJyb3IgbWVzc2FnZSAoVGhlCi0g ICAgIG1lc3NhZ2UgaXMgdXNlZnVsLCBob3dldmVyLCBpbiBkZXRlY3Rpbmcg YnVncyBpbiBnZGIgKGxpa2UgaWYgZ2RiCi0gICAgIGNsb2JiZXJzIHRoZSBz dGFjaykpLiAgSW4gZmFjdCwgc2hvdWxkIHdlIGJlIHJlc3RvcmluZyB0aGUK LSAgICAgaW5mZXJpb3Igc3RhdHVzIGF0IGFsbCBpbiB0aGF0IGNhc2U/ICAu ICAqLwotCi0gIGlmICh0YXJnZXRfaGFzX3N0YWNrICYmIGluZl9zdGF0dXMt PnJlc3RvcmVfc3RhY2tfaW5mbykKKyAgaWYgKHRhcmdldF9oYXNfc3RhY2sp CiAgICAgewogICAgICAgLyogVGhlIHBvaW50IG9mIGNhdGNoX2Vycm9ycyBp cyB0aGF0IGlmIHRoZSBzdGFjayBpcyBjbG9iYmVyZWQsCiAgICAgICAgICB3 YWxraW5nIHRoZSBzdGFjayBtaWdodCBlbmNvdW50ZXIgYSBnYXJiYWdlIHBv aW50ZXIgYW5kCkBAIC00OTMxLDcgKzQ5ODcsNiBAQCByZXN0b3JlX2luZmVy aW9yX3N0YXR1cyAoc3RydWN0IGluZmVyaW9yCiAJLyogRXJyb3IgaW4gcmVz dG9yaW5nIHRoZSBzZWxlY3RlZCBmcmFtZS4gIFNlbGVjdCB0aGUgaW5uZXJt b3N0CiAJICAgZnJhbWUuICAqLwogCXNlbGVjdF9mcmFtZSAoZ2V0X2N1cnJl bnRfZnJhbWUgKCkpOwotCiAgICAgfQogCiAgIHhmcmVlIChpbmZfc3RhdHVz KTsKQEAgLTQ5NTQsMTAgKzUwMDksOSBAQCBkaXNjYXJkX2luZmVyaW9yX3N0 YXR1cyAoc3RydWN0IGluZmVyaW9yCiB7CiAgIC8qIFNlZSBzYXZlX2luZmVy aW9yX3N0YXR1cyBmb3IgaW5mbyBvbiBzdG9wX2Jwc3RhdC4gKi8KICAgYnBz dGF0X2NsZWFyICgmaW5mX3N0YXR1cy0+c3RvcF9icHN0YXQpOwotICByZWdj YWNoZV94ZnJlZSAoaW5mX3N0YXR1cy0+cmVnaXN0ZXJzKTsKICAgeGZyZWUg KGluZl9zdGF0dXMpOwogfQotCisMCiBpbnQKIGluZmVyaW9yX2hhc19mb3Jr ZWQgKHB0aWRfdCBwaWQsIHB0aWRfdCAqY2hpbGRfcGlkKQogewpJbmRleDog dGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLmV4cAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3Rlc3RzdWl0ZS9n ZGIuYmFzZS9icmVhay5leHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzgK ZGlmZiAtdSAtcCAtdSAtcCAtcjEuMzggYnJlYWsuZXhwCi0tLSB0ZXN0c3Vp dGUvZ2RiLmJhc2UvYnJlYWsuZXhwCTMgSmFuIDIwMDkgMDU6NTg6MDMgLTAw MDAJMS4zOAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLmV4cAkxOSBK YW4gMjAwOSAwMTowODo0NyAtMDAwMApAQCAtNTg0LDcgKzU4NCw3IEBAIGdk Yl9leHBlY3QgewogfQogc2VuZF9nZGIgInByaW50IG1hcmtlcjIoOTkpXG4i CiBnZGJfZXhwZWN0IHsKLSAgLXJlICJUaGUgcHJvZ3JhbSBiZWluZyBkZWJ1 Z2dlZCBzdG9wcGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20g R0RCLlxyXG5XaGVuIHRoZSBmdW5jdGlvbiAubWFya2VyMiRwcm90by4gaXMg ZG9uZSBleGVjdXRpbmcsIEdEQiB3aWxsIHNpbGVudGx5XHJcbnN0b3AgLmlu c3RlYWQgb2YgY29udGludWluZyB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lv biBjb250YWluaW5nXHJcbnRoZSBmdW5jdGlvbiBjYWxsLi4uKiRnZGJfcHJv bXB0ICQiXAorICAtcmUgIlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0 b3BwZWQgd2hpbGUgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuXHJc bkV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUg ZnVuY3Rpb25cclxuLm1hcmtlcjIkcHJvdG8uIHdpbGwgYmUgYWJhbmRvbmVk LlxyXG5XaGVuIHRoZSBmdW5jdGlvbiBpcyBkb25lIGV4ZWN1dGluZywgR0RC IHdpbGwgc2lsZW50bHkgc3RvcC4uKiRnZGJfcHJvbXB0ICQiXAogICAgICAg ICAgIHtwYXNzICJoaXQgYnJlYWtwb2ludCBvbiBjYWxsZWQgZnVuY3Rpb24i fQogICAtcmUgIiRnZGJfcHJvbXB0ICQiXAogICAgICAgICAgIHtmYWlsICJo aXQgYnJlYWtwb2ludCBvbiBjYWxsZWQgZnVuY3Rpb24ifQpJbmRleDogdGVz dHN1aXRlL2dkYi5iYXNlL2NhbGwtc2lnbmFsLXJlc3VtZS5leHAKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5iYXNl L2NhbGwtc2lnbmFsLXJlc3VtZS5leHAKZGlmZiAtTiB0ZXN0c3VpdGUvZ2Ri LmJhc2UvY2FsbC1zaWduYWwtcmVzdW1lLmV4cAotLS0gL2Rldi9udWxsCTEg SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuYmFz ZS9jYWxsLXNpZ25hbC1yZXN1bWUuZXhwCTE5IEphbiAyMDA5IDAxOjA4OjQ3 IC0wMDAwCkBAIC0wLDAgKzEsMTU5IEBACisjIENvcHlyaWdodCAyMDA4IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisjIFRlc3QgaW5mZXJpb3IgcmVzdW1wdGlvbiBhZnRlciBkaXNjYXJk aW5nIGEgaGFuZC1jYWxsZWQgZnVuY3Rpb24uCisjIFRoZXJlIGFyZSB0d28g dGhpbmdzIHRvIHRlc3QuCisjIDEpIEluZmVyaW9yIHN0b3BzIG5vcm1hbGx5 LiAgVXBvbiByZXN1bXB0aW9uIGl0IHNob3VsZCBjb250aW51ZSBub3JtYWxs eSwKKyMgICAgcmVnYXJkbGVzcyBvZiB3aGF0ZXZlciBzaWduYWwgdGhlIGhh bmQtY2FsbGVkIGZ1bmN0aW9uIGdvdC4KKyMgMikgSW5mZXJpb3IgaXMgc3Rv cHBlZCBhdCBhIHNpZ25hbC4gIFVwb24gcmVzdW1wdGlvbiBpdCBzaG91bGQg Y29udGludWUKKyMgICAgd2l0aCB0aGF0IHNpZ25hbCwgcmVnYXJkbGVzcyBv ZiB3aGF0ZXZlciB0aGUgaGFuZC1jYWxsZWQgZnVuY3Rpb24gZGlkLgorCitp ZiAkdHJhY2VsZXZlbCB0aGVuIHsKKwlzdHJhY2UgJHRyYWNlbGV2ZWwKK30K KworaWYgW3RhcmdldF9pbmZvIGV4aXN0cyBnZGIsbm9pbmZlcmlvcmlvXSB7 CisgICAgdmVyYm9zZSAiU2tpcHBpbmcgY2FsbC1zaWduYWwtcmVzdW1lLmV4 cCBiZWNhdXNlIG9mIG5vIGZpbGVpbyBjYXBhYmlsaXRpZXMuIgorICAgIGNv bnRpbnVlCit9CisKK3NldCBwcm1zX2lkIDAKK3NldCBidWdfaWQgMAorCitz ZXQgdGVzdGZpbGUgImNhbGwtc2lnbmFscyIKK3NldCBzcmNmaWxlICR7dGVz dGZpbGV9LmMKK3NldCBiaW5maWxlICR7b2JqZGlyfS8ke3N1YmRpcn0vJHt0 ZXN0ZmlsZX0KKworaWYgIHsgW2dkYl9jb21waWxlICIke3NyY2Rpcn0vJHtz dWJkaXJ9LyR7c3JjZmlsZX0iICIke2JpbmZpbGV9IiBleGVjdXRhYmxlIHtk ZWJ1Z31dICE9ICIiIH0geworICAgICB1bnRlc3RlZCBjYWxsLXNpZ25hbC1y ZXN1bWUuZXhwCisgICAgIHJldHVybiAtMQorfQorCisjIFNvbWUgdGFyZ2V0 cyBjYW4ndCBkbyBmdW5jdGlvbiBjYWxscywgc28gZG9uJ3QgZXZlbiBib3Ro ZXIgd2l0aCB0aGlzCisjIHRlc3QuCitpZiBbdGFyZ2V0X2luZm8gZXhpc3Rz IGdkYixjYW5ub3RfY2FsbF9mdW5jdGlvbnNdIHsKKyAgICBzZXR1cF94ZmFp bCAiKi0qLSoiIDI0MTYKKyAgICBmYWlsICJUaGlzIHRhcmdldCBjYW4gbm90 IGNhbGwgZnVuY3Rpb25zIgorICAgIGNvbnRpbnVlCit9CisKK3Byb2MgZ2V0 X2R1bW15X2ZyYW1lX251bWJlciB7IH0geworICBnbG9iYWwgZ2RiX3Byb21w dAorCisgIHNlbmRfZ2RiICJidFxuIgorICBnZGJfZXhwZWN0IHsKKyAgICAt cmUgIiMoXFswLTlcXSopICo8ZnVuY3Rpb24gY2FsbGVkIGZyb20gZ2RiPi4q JGdkYl9wcm9tcHQgJCIKKyAgICAgIHsKKwlyZXR1cm4gJGV4cGVjdF9vdXQo MSxzdHJpbmcpCisgICAgICB9CisgICAgLXJlICIkZ2RiX3Byb21wdCAkIgor ICAgICAgeworCXJldHVybiAiIgorICAgICAgfQorICAgIHRpbWVvdXQKKyAg ICAgIHsKKwlyZXR1cm4gIiIKKyAgICAgIH0KKyAgfQorICByZXR1cm4gIiIK K30KKworIyBTdGFydCB3aXRoIGEgZnJlc2ggZ2RiLgorCitnZGJfZXhpdAor Z2RiX3N0YXJ0CitnZGJfcmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRzdWJk aXIKK2dkYl9sb2FkICR7YmluZmlsZX0KKworaWYgeyAhW3J1bnRvX21haW5d IH0geworICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWluIgorICAgIHJldHVy biAwCit9CisKK2dkYl90ZXN0ICJicmVhayBzdG9wX29uZSIgIkJyZWFrcG9p bnQgXFswLTlcXSogYXQgLioiCitnZGJfdGVzdCAiY29udGludWUiICJDb250 aW51aW5nLipCcmVha3BvaW50IFxbMC05XF0qLCBzdG9wX29uZS4qIiBcCisg ICAgImNvbnRpbnVlIHRvIGJyZWFrcG9pbnQgYXQgc3RvcF9vbmUiCisKKyMg Q2FsbCBmdW5jdGlvbiAoY2F1c2luZyB0aGUgcHJvZ3JhbSB0byBnZXQgYSBz aWduYWwpLCBhbmQgc2VlIGlmIGdkYiBoYW5kbGVzCisjIGl0IHByb3Blcmx5 LgorZ2RiX3Rlc3RfbXVsdGlwbGUgImNhbGwgZ2VuX3NpZ25hbCAoKSIgXAor CSJpbmZlcmlvciBmdW5jdGlvbiBjYWxsIHNpZ25hbGVkIiB7CisgICAgLXJl ICJcW1xyXG5cXSpubyBzaWduYWxcW1xyXG5cXSskZ2RiX3Byb21wdCAkIiB7 CisJdW5zdXBwb3J0ZWQgImluZmVyaW9yIGZ1bmN0aW9uIGNhbGwgc2lnbmFs ZWQiCisJcmV0dXJuIDAKKyAgICB9CisgICAgLXJlICJcW1xyXG5cXSpUaGUg cHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCB3YXMgc2lnbmFsZWQuKlxbXHJcblxd KyRnZGJfcHJvbXB0ICQiIHsKKwlwYXNzICJpbmZlcmlvciBmdW5jdGlvbiBj YWxsIHNpZ25hbGVkIgorICAgIH0KK30KKworc2V0IGZyYW1lX251bWJlciBb Z2V0X2R1bW15X2ZyYW1lX251bWJlcl0KK2lmIHsgIiRmcmFtZV9udW1iZXIi ID09ICIiIH0geworICAgIGZhaWwgImR1bW15IHN0YWNrIGZyYW1lIG51bWJl ciIKKyAgICBzZXR1cF94ZmFpbCAiKi0qLSoiCit9IGVsc2UgeworICAgIHBh c3MgImR1bW15IHN0YWNrIGZyYW1lIG51bWJlciIKK30KKworIyBQb3AgdGhl IGR1bW15IGZyYW1lLgorZ2RiX3Rlc3QgImZyYW1lICRmcmFtZV9udW1iZXIi ICIiCitnZGJfdGVzdCAic2V0IGNvbmZpcm0gb2ZmIiAiIgorZ2RiX3Rlc3Qg InJldHVybiIgIiIKKworIyBSZXN1bWUgZXhlY3V0aW9uLCB0aGUgcHJvZ3Jh bSBzaG91bGQgY29udGludWUgd2l0aG91dCBhbnkgc2lnbmFsLgorCitnZGJf dGVzdCAiYnJlYWsgc3RvcF90d28iICJCcmVha3BvaW50IFxbMC05XF0qIGF0 IC4qIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiQnJlYWtwb2ludCBcWzAtOVxd Kiwgc3RvcF90d28uKiIgXAorICAgICJjb250aW51ZSB0byBicmVha3BvaW50 IGF0IHN0b3BfdHdvIgorCisjIENvbnRpbnVlIGFnYWluLCB3ZSBzaG91bGQg Z2V0IGEgc2lnbmFsLgorCitnZGJfdGVzdCAiY29udGludWUiICJQcm9ncmFt IHJlY2VpdmVkIHNpZ25hbCAuKiIgXAorICAgICJjb250aW51ZSB0byByZWNl aXB0IG9mIHNpZ25hbCIKKworIyBIYW5kIGNhbGwgYW5vdGhlciBmdW5jdGlv biB0aGF0IHByZW1hdHVyZWx5IHN0b3BzLAorIyB0aGVuIG1hbnVhbGx5IHBv cCB0aGUgZHVtbXkgc3RhY2sgZnJhbWUuCisKK2dkYl90ZXN0ICJicmVhayBu dWxsX2hhbmRfY2FsbCIgIkJyZWFrcG9pbnQgXFswLTlcXSogYXQgLioiCitn ZGJfdGVzdCAiY2FsbCBudWxsX2hhbmRfY2FsbCAoKSIgIkJyZWFrcG9pbnQg XFswLTlcXSosIG51bGxfaGFuZF9jYWxsLioiIFwKKyAgICAibnVsbF9oYW5k X2NhbGwiCisKK3NldCBmcmFtZV9udW1iZXIgW2dldF9kdW1teV9mcmFtZV9u dW1iZXJdCitpZiB7ICIkZnJhbWVfbnVtYmVyIiA9PSAiIiB9IHsKKyAgICBm YWlsICJkdW1teSBzdGFjayBmcmFtZSBudW1iZXIiCisgICAgc2V0dXBfeGZh aWwgIiotKi0qIgorICAgICMgTmVlZCBzb21ldGhpbmcuCisgICAgc2V0IGZy YW1lX251bWJlciAwCit9IGVsc2UgeworICAgIHBhc3MgImR1bW15IHN0YWNr IGZyYW1lIG51bWJlciIKK30KKworIyBQb3AgdGhlIGR1bW15IGZyYW1lLgor Z2RiX3Rlc3QgImZyYW1lICRmcmFtZV9udW1iZXIiICIiCitnZGJfdGVzdCAi c2V0IGNvbmZpcm0gb2ZmIiAiIgorZ2RiX3Rlc3QgInJldHVybiIgIiIKKwor IyBDb250aW51ZSBhZ2FpbiwgdGhpcyB0aW1lIHdlIHNob3VsZCBnZXQgdG8g dGhlIHNpZ25hbCBoYW5kbGVyLgorCitnZGJfdGVzdCAiYnJlYWsgaGFuZGxl X3NpZ25hbCIgIkJyZWFrcG9pbnQgXFswLTlcXSogYXQgLioiCitnZGJfdGVz dCAiY29udGludWUiICJCcmVha3BvaW50IFxbMC05XF0qLCBoYW5kbGVfc2ln bmFsLioiIFwKKyAgICAiY29udGludWUgdG8gYnJlYWtwb2ludCBhdCBoYW5k bGVfc2lnbmFsIgorCisjIENvbnRpbnVlIG9uZSBsYXN0IHRpbWUsIHRoZSBw cm9ncmFtIHNob3VsZCBleGl0IG5vcm1hbGx5LgorCitnZGJfdGVzdCAiY29u dGludWUiICJQcm9ncmFtIGV4aXRlZCBub3JtYWxseS4iIFwKKyAgICAiY29u dGludWUgdG8gcHJvZ3JhbSBleGl0IgorCityZXR1cm4gMApJbmRleDogdGVz dHN1aXRlL2dkYi5iYXNlL2NhbGwtc2lnbmFscy5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIuYmFzZS9jYWxsLXNp Z25hbHMuYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIuYmFzZS9jYWxsLXNpZ25h bHMuYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK KysrIHRlc3RzdWl0ZS9nZGIuYmFzZS9jYWxsLXNpZ25hbHMuYwkxOSBKYW4g MjAwOSAwMTowODo0NyAtMDAwMApAQCAtMCwwICsxLDg5IEBACisvKiBUaGlz IHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgor CisgICBDb3B5cmlnaHQgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogU3Vw cG9ydCBwcm9ncmFtIGZvciB0ZXN0aW5nIGhhbmRsaW5nIG9mIGluZmVyaW9y IGZ1bmN0aW9uIGNhbGxzCisgICBpbiB0aGUgcHJlc2VuY2Ugb2Ygc2lnbmFs cy4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHNpZ25h bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit2b2lkCitoYW5kbGVfc2ln bmFsIChpbnQgc2lnKQoreworfQorCit2b2lkCitnZW5fc2lnbmFsICgpCit7 CisgIC8qIEFjY29yZGluZyB0byBzaWdhbGwuZXhwLCBTSUdBQlJUIGlzIGFs d2F5cyBzdXBwb3J0ZWQuICAqLworI2lmZGVmIFNJR0FCUlQKKyAga2lsbCAo Z2V0cGlkICgpLCBTSUdBQlJUKTsKKyNlbmRpZgorICAvKiBJZiB3ZSBnZXQg aGVyZSB3ZSBjb3VsZG4ndCBnZW5lcmF0ZSBhIHNpZ25hbCwgdGVsbCBkZWph Z251LiAgKi8KKyAgcHJpbnRmICgibm8gc2lnbmFsXG4iKTsKK30KKworLyog RWFzeSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50LiAgKi8KKwordm9pZAor c3RvcF9vbmUgKCkKK3sKK30KKwordm9pZAorc3RvcF90d28gKCkKK3sKK30K Kwordm9pZAorbnVsbF9oYW5kX2NhbGwgKCkKK3sKK30KKworaW50CittYWlu ICgpCit7CisjaWZkZWYgdXNlc3R1YnMKKyAgc2V0X2RlYnVnX3RyYXBzICgp OworICBicmVha3BvaW50ICgpOworI2VuZGlmCisKKyNpZmRlZiBTSUdfU0VU TUFTSworICAvKiBFbnN1cmUgYWxsIHRoZSBzaWduYWxzIGFyZW4ndCBibG9j a2VkLgorICAgICBUaGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIHRlc3Rz dWl0ZSBpcyBydW4gbWF5IGhhdmUgYmxvY2tlZCBzb21lCisgICAgIGZvciB3 aGF0ZXZlciByZWFzb24uICAqLworICB7CisgICAgc2lnc2V0X3QgbmV3c2V0 OworICAgIHNpZ2VtcHR5c2V0ICgmbmV3c2V0KTsKKyAgICBzaWdwcm9jbWFz ayAoU0lHX1NFVE1BU0ssICZuZXdzZXQsIE5VTEwpOworICB9CisjZW5kaWYK KworICBzaWduYWwgKFNJR0FCUlQsIGhhbmRsZV9zaWduYWwpOworCisgIC8q IFN0b3AgaGVyZSBzbyB3ZSBjYW4gaGFuZC1jYWxsIGdlbl9zaWduYWwuICAq LworICBzdG9wX29uZSAoKTsKKworICAvKiBXaGVuIHdlJ3JlIHJlc3VtZWQg c3RvcCBoZXJlLiAgKi8KKyAgc3RvcF90d28gKCk7CisKKyAgLyogV2hlbiB3 ZSdyZSByZXN1bWVkIHdlIGdlbmVyYXRlIGEgc2lnbmFsIG91cnNlbHZlcy4g ICovCisgIGdlbl9zaWduYWwgKCk7CisKKyAgcmV0dXJuIDA7Cit9CkluZGV4 OiB0ZXN0c3VpdGUvZ2RiLmJhc2Uvc2VwZGVidWcuZXhwCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL3NlcGRlYnVnLmV4cCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xOApkaWZmIC11IC1wIC11IC1wIC1yMS4xOCBzZXBkZWJ1Zy5leHAK LS0tIHRlc3RzdWl0ZS9nZGIuYmFzZS9zZXBkZWJ1Zy5leHAJMyBKYW4gMjAw OSAwNTo1ODowMyAtMDAwMAkxLjE4CisrKyB0ZXN0c3VpdGUvZ2RiLmJhc2Uv c2VwZGVidWcuZXhwCTE5IEphbiAyMDA5IDAxOjA4OjQ3IC0wMDAwCkBAIC01 OTksNyArNTk5LDcgQEAgZ2RiX2V4cGVjdCB7CiB9CiBzZW5kX2dkYiAicHJp bnQgbWFya2VyMig5OSlcbiIKIGdkYl9leHBlY3QgewotICAtcmUgIlRoZSBw cm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4gYSBmdW5j dGlvbiBjYWxsZWQgZnJvbSBHREIuXHJcbldoZW4gdGhlIGZ1bmN0aW9uIC5t YXJrZXIyLiBpcyBkb25lIGV4ZWN1dGluZywgR0RCIHdpbGwgc2lsZW50bHlc clxuc3RvcCAuaW5zdGVhZCBvZiBjb250aW51aW5nIHRvIGV2YWx1YXRlIHRo ZSBleHByZXNzaW9uIGNvbnRhaW5pbmdcclxudGhlIGZ1bmN0aW9uIGNhbGwu Li4qJGdkYl9wcm9tcHQgJCJcCisgIC1yZSAiVGhlIHByb2dyYW0gYmVpbmcg ZGVidWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBm cm9tIEdEQi5cclxuRXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBjb250 YWluaW5nIHRoZSBmdW5jdGlvblxyXG4ubWFya2VyMi4gd2lsbCBiZSBhYmFu ZG9uZWQuXHJcbldoZW4gdGhlIGZ1bmN0aW9uIGlzIGRvbmUgZXhlY3V0aW5n LCBHREIgd2lsbCBzaWxlbnRseSBzdG9wLi4qJGdkYl9wcm9tcHQgJCJcCiAg ICAgICAgICAge3Bhc3MgImhpdCBicmVha3BvaW50IG9uIGNhbGxlZCBmdW5j dGlvbiJ9CiAgIC1yZSAiJGdkYl9wcm9tcHQgJCJcCiAgICAgICAgICAge2Zh aWwgImhpdCBicmVha3BvaW50IG9uIGNhbGxlZCBmdW5jdGlvbiJ9CkluZGV4 OiB0ZXN0c3VpdGUvZ2RiLmJhc2UvdW53aW5kb25zaWduYWwuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLmJhc2Uv dW53aW5kb25zaWduYWwuYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIuYmFzZS91 bndpbmRvbnNpZ25hbC5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow MDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL3Vud2luZG9uc2ln bmFsLmMJMTkgSmFuIDIwMDkgMDE6MDg6NDcgLTAwMDAKQEAgLTAsMCArMSw2 NSBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdO VSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKy8qIFN1cHBvcnQgcHJvZ3JhbSBmb3IgdGVzdGluZyB1bndpbmRv bnNpZ25hbC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit2b2lkCitnZW5f c2lnbmFsICgpCit7CisgIC8qIEFjY29yZGluZyB0byBzaWdhbGwuZXhwLCBT SUdBQlJUIGlzIGFsd2F5cyBzdXBwb3J0ZWQuICAqLworI2lmZGVmIFNJR0FC UlQKKyAga2lsbCAoZ2V0cGlkICgpLCBTSUdBQlJUKTsKKyNlbmRpZgorICAv KiBJZiB3ZSBnZXQgaGVyZSB3ZSBjb3VsZG4ndCBnZW5lcmF0ZSBhIHNpZ25h bCwgdGVsbCBkZWphZ251LiAgKi8KKyAgcHJpbnRmICgibm8gc2lnbmFsXG4i KTsKK30KKworLyogRWFzeSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50LiAg Ki8KKwordm9pZAorc3RvcF9oZXJlICgpCit7Cit9CisKK2ludAorbWFpbiAo KQoreworI2lmZGVmIHVzZXN0dWJzCisgIHNldF9kZWJ1Z190cmFwcyAoKTsK KyAgYnJlYWtwb2ludCAoKTsKKyNlbmRpZgorCisjaWZkZWYgU0lHX1NFVE1B U0sKKyAgLyogRW5zdXJlIGFsbCB0aGUgc2lnbmFscyBhcmVuJ3QgYmxvY2tl ZC4KKyAgICAgVGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSB0ZXN0c3Vp dGUgaXMgcnVuIG1heSBoYXZlIGJsb2NrZWQgc29tZQorICAgICBmb3Igd2hh dGV2ZXIgcmVhc29uLiAgKi8KKyAgeworICAgIHNpZ3NldF90IG5ld3NldDsK KyAgICBzaWdlbXB0eXNldCAoJm5ld3NldCk7CisgICAgc2lncHJvY21hc2sg KFNJR19TRVRNQVNLLCAmbmV3c2V0LCBOVUxMKTsKKyAgfQorI2VuZGlmCisK KyAgLyogU3RvcCBoZXJlIHNvIHdlIGNhbiBoYW5kLWNhbGwgZ2VuX3NpZ25h bC4gICovCisgIHN0b3BfaGVyZSAoKTsKKworICByZXR1cm4gMDsKK30KSW5k ZXg6IHRlc3RzdWl0ZS9nZGIuYmFzZS91bndpbmRvbnNpZ25hbC5leHAKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5i YXNlL3Vud2luZG9uc2lnbmFsLmV4cApkaWZmIC1OIHRlc3RzdWl0ZS9nZGIu YmFzZS91bndpbmRvbnNpZ25hbC5leHAKLS0tIC9kZXYvbnVsbAkxIEphbiAx OTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLmJhc2UvdW53 aW5kb25zaWduYWwuZXhwCTE5IEphbiAyMDA5IDAxOjA4OjQ3IC0wMDAwCkBA IC0wLDAgKzEsOTggQEAKKyMgQ29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2lmICR0 cmFjZWxldmVsIHRoZW4geworCXN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitp ZiBbdGFyZ2V0X2luZm8gZXhpc3RzIGdkYixub2luZmVyaW9yaW9dIHsKKyAg ICB2ZXJib3NlICJTa2lwcGluZyB1bndpbmRvbnNpZ25hbC5leHAgYmVjYXVz ZSBvZiBubyBmaWxlaW8gY2FwYWJpbGl0aWVzLiIKKyAgICBjb250aW51ZQor fQorCitzZXQgcHJtc19pZCAwCitzZXQgYnVnX2lkIDAKKworc2V0IHRlc3Rm aWxlICJ1bndpbmRvbnNpZ25hbCIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9 LmMKK3NldCBiaW5maWxlICR7b2JqZGlyfS8ke3N1YmRpcn0vJHt0ZXN0Zmls ZX0KKworaWYgIHsgW2dkYl9jb21waWxlICIke3NyY2Rpcn0vJHtzdWJkaXJ9 LyR7c3JjZmlsZX0iICIke2JpbmZpbGV9IiBleGVjdXRhYmxlIHtkZWJ1Z31d ICE9ICIiIH0geworICAgICB1bnRlc3RlZCB1bndpbmRvbnNpZ25hbC5leHAK KyAgICAgcmV0dXJuIC0xCit9CisKKyMgU29tZSB0YXJnZXRzIGNhbid0IGRv IGZ1bmN0aW9uIGNhbGxzLCBzbyBkb24ndCBldmVuIGJvdGhlciB3aXRoIHRo aXMKKyMgdGVzdC4KK2lmIFt0YXJnZXRfaW5mbyBleGlzdHMgZ2RiLGNhbm5v dF9jYWxsX2Z1bmN0aW9uc10geworICAgIHNldHVwX3hmYWlsICIqLSotKiIg MjQxNgorICAgIGZhaWwgIlRoaXMgdGFyZ2V0IGNhbiBub3QgY2FsbCBmdW5j dGlvbnMiCisgICAgY29udGludWUKK30KKworIyBTdGFydCB3aXRoIGEgZnJl c2ggZ2RiLgorCitnZGJfZXhpdAorZ2RiX3N0YXJ0CitnZGJfcmVpbml0aWFs aXplX2RpciAkc3JjZGlyLyRzdWJkaXIKK2dkYl9sb2FkICR7YmluZmlsZX0K KworaWYgeyAhW3J1bnRvX21haW5dIH0geworICAgIGZhaWwgIkNhbid0IHJ1 biB0byBtYWluIgorICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0ICJicmVh ayBzdG9wX2hlcmUiICJCcmVha3BvaW50IFxbMC05XF0qIGF0IC4qIgorZ2Ri X3Rlc3QgImNvbnRpbnVlIiAiQ29udGludWluZy4qQnJlYWtwb2ludCBcWzAt OVxdKiwgc3RvcF9oZXJlLioiIFwKKyAgICAiY29udGludWUgdG8gYnJlYWtw b2ludCBhdCBzdG9wX2hlcmUiCisKKyMgVHVybiBvbiB1bndpbmRvbnNpZ25h bC4KK2dkYl90ZXN0ICJzZXQgdW53aW5kb25zaWduYWwgb24iIFwKKwkiIiBc CisJInNldHRpbmcgdW53aW5kb25zaWduYWwiCitnZGJfdGVzdCAic2hvdyB1 bndpbmRvbnNpZ25hbCIgXAorCSJVbndpbmRpbmcgb2Ygc3RhY2sgLiogaXMg b24uIiBcCisJInNob3dpbmcgdW53aW5kb25zaWduYWwiCisKKyMgQ2FsbCBm dW5jdGlvbiAoY2F1c2luZyB0aGUgcHJvZ3JhbSB0byBnZXQgYSBzaWduYWwp LCBhbmQgc2VlIGlmIGdkYiBoYW5kbGVzCisjIGl0IHByb3Blcmx5LgorZ2Ri X3Rlc3RfbXVsdGlwbGUgImNhbGwgZ2VuX3NpZ25hbCAoKSIgXAorCSJ1bndp bmRvbnNpZ25hbCwgaW5mZXJpb3IgZnVuY3Rpb24gY2FsbCBzaWduYWxlZCIg eworICAgIC1yZSAiXFtcclxuXF0qbm8gc2lnbmFsXFtcclxuXF0rJGdkYl9w cm9tcHQgJCIgeworCXVuc3VwcG9ydGVkICJ1bndpbmRvbnNpZ25hbCwgaW5m ZXJpb3IgZnVuY3Rpb24gY2FsbCBzaWduYWxlZCIKKwlyZXR1cm4gMAorICAg IH0KKyAgICAtcmUgIlxbXHJcblxdKlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVn Z2VkIHdhcyBzaWduYWxlZC4qXFtcclxuXF0rJGdkYl9wcm9tcHQgJCIgewor CXBhc3MgInVud2luZG9uc2lnbmFsLCBpbmZlcmlvciBmdW5jdGlvbiBjYWxs IHNpZ25hbGVkIgorICAgIH0KK30KKworIyBWZXJpZnkgdGhlIHN0YWNrIGdv dCB1bndvdW5kLgorZ2RiX3Rlc3QgImJ0IiBcCisgICAgIiMwICpcW3gwLTlh LWYgaW5cXSpzdG9wX2hlcmUgXFwoLipcXCkgYXQgLiojMSAqXFt4MC05YS1m IGluXF0qbWFpbiBcXCguKlxcKSBhdCAuKiIgXAorCSJ1bndpbmRvbnNpZ25h bCwgc3RhY2sgdW53b3VuZCIKKworIyBWZXJpZnkgdGhlIGR1bW15IGZyYW1l IGdvdCByZW1vdmVkIGZyb20gZHVtbXlfZnJhbWVfc3RhY2suCitnZGJfdGVz dF9tdWx0aXBsZSAibWFpbnQgcHJpbnQgZHVtbXktZnJhbWVzIiBcCisJInVu d2luZG9uc2lnbmFsLCBkdW1teSBmcmFtZSByZW1vdmVkIiB7CisgICAgLXJl ICJcW1xyXG5cXSouKnN0YWNrPS4qY29kZT0uKlxbXHJcblxdKyRnZGJfcHJv bXB0ICQiIHsKKwlmYWlsICJ1bndpbmRvbnNpZ25hbCwgZHVtbXkgZnJhbWUg cmVtb3ZlZCIKKyAgICB9CisgICAgLXJlICJcW1xyXG5cXSskZ2RiX3Byb21w dCAkIiB7CisJcGFzcyAidW53aW5kb25zaWduYWwsIGR1bW15IGZyYW1lIHJl bW92ZWQiCisgICAgfQorfQorCityZXR1cm4gMApJbmRleDogdGVzdHN1aXRl L2dkYi5taS9taS1zeW4tZnJhbWUuZXhwCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvdGVzdHN1aXRlL2dkYi5t aS9taS1zeW4tZnJhbWUuZXhwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIy CmRpZmYgLXUgLXAgLXUgLXAgLXIxLjIyIG1pLXN5bi1mcmFtZS5leHAKLS0t IHRlc3RzdWl0ZS9nZGIubWkvbWktc3luLWZyYW1lLmV4cAkzIEphbiAyMDA5 IDA1OjU4OjA2IC0wMDAwCTEuMjIKKysrIHRlc3RzdWl0ZS9nZGIubWkvbWkt c3luLWZyYW1lLmV4cAkxOSBKYW4gMjAwOSAwMTowODo0NyAtMDAwMApAQCAt NDMsNyArNDMsOCBAQCBtaV9jcmVhdGVfYnJlYWtwb2ludCAiZm9vIiAyIGtl ZXAgZm9vICIuCiAjIENhbGwgZm9vKCkgYnkgaGFuZCwgd2hlcmUgd2UnbGwg aGl0IGEgYnJlYWtwb2ludC4KICMKIAotbWlfZ2RiX3Rlc3QgIjQwMS1kYXRh LWV2YWx1YXRlLWV4cHJlc3Npb24gZm9vKCkiICIuKjQwMVxcXmVycm9yLG1z Zz1cIlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUg aW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuXFxcXG5XaGVuIHRoZSBm dW5jdGlvbiBcXChmb29cXCkgaXMgZG9uZSBleGVjdXRpbmcsIEdEQiB3aWxs IHNpbGVudGx5XFxcXG5zdG9wIFxcKGluc3RlYWQgb2YgY29udGludWluZyB0 byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBjb250YWluaW5nXFxcXG50aGUg ZnVuY3Rpb24gY2FsbFxcKS5cIiIgImNhbGwgaW5mZXJpb3IncyBmdW5jdGlv biB3aXRoIGEgYnJlYWtwb2ludCBzZXQgaW4gaXQiCittaV9nZGJfdGVzdCAi NDAxLWRhdGEtZXZhbHVhdGUtZXhwcmVzc2lvbiBmb28oKSIgIi4qNDAxXFxe ZXJyb3IsbXNnPVwiVGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgc3RvcHBl ZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQi5cXFxcbkV2 YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUgZnVu Y3Rpb25cXFxcblxcKGZvb1xcKSB3aWxsIGJlIGFiYW5kb25lZC5cXFxcbldo ZW4gdGhlIGZ1bmN0aW9uIGlzIGRvbmUgZXhlY3V0aW5nLCBHREIgd2lsbCBz aWxlbnRseSBzdG9wLlwiIiBcCisgICAgImNhbGwgaW5mZXJpb3IncyBmdW5j dGlvbiB3aXRoIGEgYnJlYWtwb2ludCBzZXQgaW4gaXQiCiAKIAogbWlfZ2Ri X3Rlc3QgIjQwMi1zdGFjay1saXN0LWZyYW1lcyIgIjQwMlxcXmRvbmUsc3Rh Y2s9XFxcW2ZyYW1lPVx7bGV2ZWw9XCIwXCIsYWRkcj1cIiRoZXhcIixmdW5j PVwiZm9vXCIsZmlsZT1cIi4qbWktc3luLWZyYW1lLmNcIixsaW5lPVwiJGRl Y2ltYWxcIlx9LGZyYW1lPVx7bGV2ZWw9XCIxXCIsYWRkcj1cIiRoZXhcIixm dW5jPVwiPGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGdkYj5cIlx9LGZyYW1lPVx7 bGV2ZWw9XCIyXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwibWFpblwiLGZpbGU9 XCIuKm1pLXN5bi1mcmFtZS5jXCIsbGluZT1cIiRkZWNpbWFsXCJcfS4qXFxc XSIgImJhY2t0cmFjZSBmcm9tIGluZmVyaW9yIGZ1bmN0aW9uIHN0b3BwZWQg YXQgYnAsIHNob3dpbmcgZ2RiIGR1bW15IGZyYW1lIgpAQCAtNjgsNyArNjks NyBAQCBtaV9jcmVhdGVfYnJlYWtwb2ludCAic3Vicm91dGluZSIgMyBrZWVw CiAgICAgImluc2VydCBicmVha3BvaW50IHN1YnJvdXRpbmUiCiAKIG1pX2dk Yl90ZXN0ICI0MDYtZGF0YS1ldmFsdWF0ZS1leHByZXNzaW9uIGhhdmVfYV92 ZXJ5X21lcnJ5X2ludGVycnVwdCgpIiBcCi0gICIuKjQwNlxcXmVycm9yLG1z Zz1cIlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUg aW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuXFxcXG5XaGVuIHRoZSBm dW5jdGlvbiBcXChoYXZlX2FfdmVyeV9tZXJyeV9pbnRlcnJ1cHRcXCkgaXMg ZG9uZSBleGVjdXRpbmcsIEdEQiB3aWxsIHNpbGVudGx5XFxcXG5zdG9wIFxc KGluc3RlYWQgb2YgY29udGludWluZyB0byBldmFsdWF0ZSB0aGUgZXhwcmVz c2lvbiBjb250YWluaW5nXFxcXG50aGUgZnVuY3Rpb24gY2FsbFxcKS5cIiIg XAorICAiLio0MDZcXF5lcnJvcixtc2c9XCJUaGUgcHJvZ3JhbSBiZWluZyBk ZWJ1Z2dlZCBzdG9wcGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZy b20gR0RCLlxcXFxuRXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBjb250 YWluaW5nIHRoZSBmdW5jdGlvblxcXFxuXFwoaGF2ZV9hX3ZlcnlfbWVycnlf aW50ZXJydXB0XFwpIHdpbGwgYmUgYWJhbmRvbmVkLlxcXFxuV2hlbiB0aGUg ZnVuY3Rpb24gaXMgZG9uZSBleGVjdXRpbmcsIEdEQiB3aWxsIHNpbGVudGx5 IHN0b3AuXCIiIFwKICAgImRhdGEgZXZhbHVhdGUgZXhwcmVzc2lvbiIKIAog IyBXZSBzaG91bGQgaGF2ZSBib3RoIGEgc2lnbmFsIGhhbmRsZXIgYW5kIGEg Y2FsbCBkdW1teSBmcmFtZQpAQCAtOTIsNyArOTMsNyBAQCBtaV9nZGJfdGVz dCAiNDA5LXN0YWNrLWxpc3QtZnJhbWVzIDAgMCIgCiAjIAogCiBtaV9nZGJf dGVzdCAiNDEwLWRhdGEtZXZhbHVhdGUtZXhwcmVzc2lvbiBiYXIoKSIgXAot ICAiLio0MTBcXF5lcnJvcixtc2c9XCJUaGUgcHJvZ3JhbSBiZWluZyBkZWJ1 Z2dlZCB3YXMgc2lnbmFsZWQgd2hpbGUgaW4gYSBmdW5jdGlvbiBjYWxsZWQg ZnJvbSBHREIuXFxcXG5HREIgcmVtYWlucyBpbiB0aGUgZnJhbWUgd2hlcmUg dGhlIHNpZ25hbCB3YXMgcmVjZWl2ZWQuXFxcXG5UbyBjaGFuZ2UgdGhpcyBi ZWhhdmlvciB1c2UgXFxcXFwic2V0IHVud2luZG9uc2lnbmFsIG9uXFxcXFwi LlxcXFxuRXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBjb250YWluaW5n IHRoZSBmdW5jdGlvbiBcXChiYXJcXCkgd2lsbCBiZSBhYmFuZG9uZWQuXCIi IFwKKyAgIi4qNDEwXFxeZXJyb3IsbXNnPVwiVGhlIHByb2dyYW0gYmVpbmcg ZGVidWdnZWQgd2FzIHNpZ25hbGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2Fs bGVkIGZyb20gR0RCLlxcXFxuR0RCIHJlbWFpbnMgaW4gdGhlIGZyYW1lIHdo ZXJlIHRoZSBzaWduYWwgd2FzIHJlY2VpdmVkLlxcXFxuVG8gY2hhbmdlIHRo aXMgYmVoYXZpb3IgdXNlIFxcXFxcInNldCB1bndpbmRvbnNpZ25hbCBvblxc XFxcIi5cXFxcbkV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY29udGFp bmluZyB0aGUgZnVuY3Rpb25cXFxcblxcKGJhclxcKSB3aWxsIGJlIGFiYW5k b25lZC5cXFxcbldoZW4gdGhlIGZ1bmN0aW9uIGlzIGRvbmUgZXhlY3V0aW5n LCBHREIgd2lsbCBzaWxlbnRseSBzdG9wLlwiIiBcCiAgICJjYWxsIGluZmVy aW9yIGZ1bmN0aW9uIHdoaWNoIHJhaXNlcyBleGNlcHRpb24iCiAKIG1pX2dk Yl90ZXN0ICI0MTEtc3RhY2stbGlzdC1mcmFtZXMiICI0MTFcXF5kb25lLHN0 YWNrPVxcXFtmcmFtZT1ce2xldmVsPVwiMFwiLGFkZHI9XCIkaGV4XCIsZnVu Yz1cImJhclwiLGZpbGU9XCIuKm1pLXN5bi1mcmFtZS5jXCIsZnVsbG5hbWU9 XCIke2Z1bGxuYW1lX3N5bnRheH0ke3NyY2ZpbGV9XCIsbGluZT1cIiRkZWNp bWFsXCJ9LGZyYW1lPVx7bGV2ZWw9XCIxXCIsYWRkcj1cIiRoZXhcIixmdW5j PVwiPGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGdkYj5cIlx9LGZyYW1lPVx7bGV2 ZWw9XCIyXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwibWFpblwiLGZpbGU9XCIu Km1pLXN5bi1mcmFtZS5jXCIsZnVsbG5hbWU9XCIke2Z1bGxuYW1lX3N5bnRh eH0ke3NyY2ZpbGV9XCIsbGluZT1cIiRkZWNpbWFsXCJ9LipcXFxdIiAiYmFj a3RyYWNlIGZyb20gaW5mZXJpb3IgZnVuY3Rpb24gYXQgZXhjZXB0aW9uIgpJ bmRleDogdGVzdHN1aXRlL2dkYi5taS9taTItc3luLWZyYW1lLmV4cAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2Ri L3Rlc3RzdWl0ZS9nZGIubWkvbWkyLXN5bi1mcmFtZS5leHAsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtdSAtcCAtdSAtcCAtcjEuMTggbWky LXN5bi1mcmFtZS5leHAKLS0tIHRlc3RzdWl0ZS9nZGIubWkvbWkyLXN5bi1m cmFtZS5leHAJMyBKYW4gMjAwOSAwNTo1ODowNiAtMDAwMAkxLjE4CisrKyB0 ZXN0c3VpdGUvZ2RiLm1pL21pMi1zeW4tZnJhbWUuZXhwCTE5IEphbiAyMDA5 IDAxOjA4OjQ3IC0wMDAwCkBAIC00NSw3ICs0NSw4IEBAIG1pX2NyZWF0ZV9i cmVha3BvaW50ICJmb28iIDIga2VlcCBmb28gIi4KICMgQ2FsbCBmb28oKSBi eSBoYW5kLCB3aGVyZSB3ZSdsbCBoaXQgYSBicmVha3BvaW50LgogIwogCi1t aV9nZGJfdGVzdCAiNDAxLWRhdGEtZXZhbHVhdGUtZXhwcmVzc2lvbiBmb28o KSIgIi4qNDAxXFxeZXJyb3IsbXNnPVwiVGhlIHByb2dyYW0gYmVpbmcgZGVi dWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9t IEdEQi5cXFxcbldoZW4gdGhlIGZ1bmN0aW9uIFxcKGZvb1xcKSBpcyBkb25l IGV4ZWN1dGluZywgR0RCIHdpbGwgc2lsZW50bHlcXFxcbnN0b3AgXFwoaW5z dGVhZCBvZiBjb250aW51aW5nIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9u IGNvbnRhaW5pbmdcXFxcbnRoZSBmdW5jdGlvbiBjYWxsXFwpLlwiIiAiY2Fs bCBpbmZlcmlvcidzIGZ1bmN0aW9uIHdpdGggYSBicmVha3BvaW50IHNldCBp biBpdCIKK21pX2dkYl90ZXN0ICI0MDEtZGF0YS1ldmFsdWF0ZS1leHByZXNz aW9uIGZvbygpIiAiLio0MDFcXF5lcnJvcixtc2c9XCJUaGUgcHJvZ3JhbSBi ZWluZyBkZWJ1Z2dlZCBzdG9wcGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2Fs bGVkIGZyb20gR0RCLlxcXFxuRXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lv biBjb250YWluaW5nIHRoZSBmdW5jdGlvblxcXFxuXFwoZm9vXFwpIHdpbGwg YmUgYWJhbmRvbmVkLlxcXFxuV2hlbiB0aGUgZnVuY3Rpb24gaXMgZG9uZSBl eGVjdXRpbmcsIEdEQiB3aWxsIHNpbGVudGx5IHN0b3AuXCIiIFwKKyAgICAi Y2FsbCBpbmZlcmlvcidzIGZ1bmN0aW9uIHdpdGggYSBicmVha3BvaW50IHNl dCBpbiBpdCIKIAogbWlfZ2RiX3Rlc3QgIjQwMi1zdGFjay1saXN0LWZyYW1l cyIgIjQwMlxcXmRvbmUsc3RhY2s9XFxcW2ZyYW1lPVx7bGV2ZWw9XCIwXCIs YWRkcj1cIiRoZXhcIixmdW5jPVwiZm9vXCIsZmlsZT1cIi4qbWktc3luLWZy YW1lLmNcIixsaW5lPVwiJGRlY2ltYWxcIlx9LGZyYW1lPVx7bGV2ZWw9XCIx XCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiPGZ1bmN0aW9uIGNhbGxlZCBmcm9t IGdkYj5cIlx9LGZyYW1lPVx7bGV2ZWw9XCIyXCIsYWRkcj1cIiRoZXhcIixm dW5jPVwibWFpblwiLGZpbGU9XCIuKm1pLXN5bi1mcmFtZS5jXCIsbGluZT1c IiRkZWNpbWFsXCJcfS4qXFxcXSIgImJhY2t0cmFjZSBmcm9tIGluZmVyaW9y IGZ1bmN0aW9uIHN0b3BwZWQgYXQgYnAsIHNob3dpbmcgZ2RiIGR1bW15IGZy YW1lIgogCkBAIC03MCw3ICs3MSw3IEBAIG1pX2NyZWF0ZV9icmVha3BvaW50 ICJzdWJyb3V0aW5lIiAzIGtlZXAKICAgICAiaW5zZXJ0IGJyZWFrcG9pbnQg c3Vicm91dGluZSIKIAogbWlfZ2RiX3Rlc3QgIjQwNi1kYXRhLWV2YWx1YXRl LWV4cHJlc3Npb24gaGF2ZV9hX3ZlcnlfbWVycnlfaW50ZXJydXB0KCkiIFwK LSAgIi4qNDA2XFxeZXJyb3IsbXNnPVwiVGhlIHByb2dyYW0gYmVpbmcgZGVi dWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9t IEdEQi5cXFxcbldoZW4gdGhlIGZ1bmN0aW9uIFxcKGhhdmVfYV92ZXJ5X21l cnJ5X2ludGVycnVwdFxcKSBpcyBkb25lIGV4ZWN1dGluZywgR0RCIHdpbGwg c2lsZW50bHlcXFxcbnN0b3AgXFwoaW5zdGVhZCBvZiBjb250aW51aW5nIHRv IGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGNvbnRhaW5pbmdcXFxcbnRoZSBm dW5jdGlvbiBjYWxsXFwpLlwiIiBcCisgICIuKjQwNlxcXmVycm9yLG1zZz1c IlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4g YSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuXFxcXG5FdmFsdWF0aW9uIG9m IHRoZSBleHByZXNzaW9uIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uXFxcXG5c XChoYXZlX2FfdmVyeV9tZXJyeV9pbnRlcnJ1cHRcXCkgd2lsbCBiZSBhYmFu ZG9uZWQuXFxcXG5XaGVuIHRoZSBmdW5jdGlvbiBpcyBkb25lIGV4ZWN1dGlu ZywgR0RCIHdpbGwgc2lsZW50bHkgc3RvcC5cIiIgXAogICAiZXZhbHVhdGUg ZXhwcmVzc2lvbiBoYXZlX2FfdmVyeV9tZXJyeV9pbnRlcnJ1cHQiCiAKICMg V2Ugc2hvdWxkIGhhdmUgYm90aCBhIHNpZ25hbCBoYW5kbGVyIGFuZCBhIGNh bGwgZHVtbXkgZnJhbWUKQEAgLTkyLDcgKzkzLDcgQEAgbWlfZ2RiX3Rlc3Qg IjQwOS1zdGFjay1saXN0LWZyYW1lcyAwIDAiIAogIyBDYWxsIGJhcigpIGJ5 IGhhbmQsIHdoaWNoIHNob3VsZCBnZXQgYW4gZXhjZXB0aW9uIHdoaWxlIHJ1 bm5pbmcuCiAjIAogCi1taV9nZGJfdGVzdCAiNDEwLWRhdGEtZXZhbHVhdGUt ZXhwcmVzc2lvbiBiYXIoKSIgIi4qNDEwXFxeZXJyb3IsbXNnPVwiVGhlIHBy b2dyYW0gYmVpbmcgZGVidWdnZWQgd2FzIHNpZ25hbGVkIHdoaWxlIGluIGEg ZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLlxcXFxuR0RCIHJlbWFpbnMgaW4g dGhlIGZyYW1lIHdoZXJlIHRoZSBzaWduYWwgd2FzIHJlY2VpdmVkLlxcXFxu VG8gY2hhbmdlIHRoaXMgYmVoYXZpb3IgdXNlIFxcXFxcInNldCB1bndpbmRv bnNpZ25hbCBvblxcXFxcIi5cXFxcbkV2YWx1YXRpb24gb2YgdGhlIGV4cHJl c3Npb24gY29udGFpbmluZyB0aGUgZnVuY3Rpb24gXFwoYmFyXFwpIHdpbGwg YmUgYWJhbmRvbmVkLlwiIiAiY2FsbCBpbmZlcmlvciBmdW5jdGlvbiB3aGlj aCByYWlzZXMgZXhjZXB0aW9uIgorbWlfZ2RiX3Rlc3QgIjQxMC1kYXRhLWV2 YWx1YXRlLWV4cHJlc3Npb24gYmFyKCkiICIuKjQxMFxcXmVycm9yLG1zZz1c IlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHdhcyBzaWduYWxlZCB3aGls ZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQi5cXFxcbkdEQiByZW1h aW5zIGluIHRoZSBmcmFtZSB3aGVyZSB0aGUgc2lnbmFsIHdhcyByZWNlaXZl ZC5cXFxcblRvIGNoYW5nZSB0aGlzIGJlaGF2aW9yIHVzZSBcXFxcXCJzZXQg dW53aW5kb25zaWduYWwgb25cXFxcXCIuXFxcXG5FdmFsdWF0aW9uIG9mIHRo ZSBleHByZXNzaW9uIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uXFxcXG5cXChi YXJcXCkgd2lsbCBiZSBhYmFuZG9uZWQuXFxcXG5XaGVuIHRoZSBmdW5jdGlv biBpcyBkb25lIGV4ZWN1dGluZywgR0RCIHdpbGwgc2lsZW50bHkgc3RvcC5c IiIgImNhbGwgaW5mZXJpb3IgZnVuY3Rpb24gd2hpY2ggcmFpc2VzIGV4Y2Vw dGlvbiIKIAogbWlfZ2RiX3Rlc3QgIjQxMS1zdGFjay1saXN0LWZyYW1lcyIg IjQxMVxcXmRvbmUsc3RhY2s9XFxcW2ZyYW1lPVx7bGV2ZWw9XCIwXCIsYWRk cj1cIiRoZXhcIixmdW5jPVwiYmFyXCIsZmlsZT1cIi4qbWktc3luLWZyYW1l LmNcIixmdWxsbmFtZT1cIiR7ZnVsbG5hbWVfc3ludGF4fSR7c3JjZmlsZX1c IixsaW5lPVwiJGRlY2ltYWxcIn0sZnJhbWU9XHtsZXZlbD1cIjFcIixhZGRy PVwiJGhleFwiLGZ1bmM9XCI8ZnVuY3Rpb24gY2FsbGVkIGZyb20gZ2RiPlwi XH0sZnJhbWU9XHtsZXZlbD1cIjJcIixhZGRyPVwiJGhleFwiLGZ1bmM9XCJt YWluXCIsZmlsZT1cIi4qbWktc3luLWZyYW1lLmNcIixmdWxsbmFtZT1cIiR7 ZnVsbG5hbWVfc3ludGF4fSR7c3JjZmlsZX1cIixsaW5lPVwiJGRlY2ltYWxc In0uKlxcXF0iICJiYWNrdHJhY2UgZnJvbSBpbmZlcmlvciBmdW5jdGlvbiBh dCBleGNlcHRpb24iCiAKSW5kZXg6IHRlc3RzdWl0ZS9nZGIudGhyZWFkcy9p bnRlcnJ1cHRlZC1oYW5kLWNhbGwuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvaW50ZXJydXB0ZWQt aGFuZC1jYWxsLmMKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvaW50 ZXJydXB0ZWQtaGFuZC1jYWxsLmMKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcw IDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvaW50 ZXJydXB0ZWQtaGFuZC1jYWxsLmMJMTkgSmFuIDIwMDkgMDE6MDg6NDcgLTAw MDAKQEAgLTAsMCArMSwxNDkgQEAKKy8qIFRlc3QgY2FzZSBmb3IgaGFuZCBm dW5jdGlvbiBjYWxscyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCBpbiBhbm90 aGVyIHRocmVhZC4KKworICAgQ29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1 ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRp bWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmbmRlZiBOUl9USFJF QURTCisjZGVmaW5lIE5SX1RIUkVBRFMgNAorI2VuZGlmCisKK3B0aHJlYWRf dCB0aHJlYWRzW05SX1RIUkVBRFNdOworCisvKiBOdW1iZXIgb2YgdGhyZWFk cyBjdXJyZW50bHkgcnVubmluZy4gICovCitpbnQgdGhyZWFkX2NvdW50Owor CitwdGhyZWFkX211dGV4X3QgdGhyZWFkX2NvdW50X211dGV4OworCitwdGhy ZWFkX2NvbmRfdCB0aHJlYWRfY291bnRfY29uZHZhcjsKKworc2lnX2F0b21p Y190IHNpZ2FicnRfcmVjZWl2ZWQ7CisKK3ZvaWQKK2luY3JfdGhyZWFkX2Nv dW50ICh2b2lkKQoreworICBwdGhyZWFkX211dGV4X2xvY2sgKCZ0aHJlYWRf Y291bnRfbXV0ZXgpOworICArK3RocmVhZF9jb3VudDsKKyAgaWYgKHRocmVh ZF9jb3VudCA9PSBOUl9USFJFQURTKQorICAgIHB0aHJlYWRfY29uZF9zaWdu YWwgKCZ0aHJlYWRfY291bnRfY29uZHZhcik7CisgIHB0aHJlYWRfbXV0ZXhf dW5sb2NrICgmdGhyZWFkX2NvdW50X211dGV4KTsKK30KKwordm9pZAorY29u ZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqY29uZCwgcHRocmVhZF9tdXRleF90 ICptdXQpCit7CisgIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0KTsKKyAgcHRo cmVhZF9jb25kX3dhaXQgKGNvbmQsIG11dCk7CisgIHB0aHJlYWRfbXV0ZXhf dW5sb2NrIChtdXQpOworfQorCit2b2lkCitub3JldHVybiAodm9pZCkKK3sK KyAgcHRocmVhZF9tdXRleF90IG11dDsKKyAgcHRocmVhZF9jb25kX3QgY29u ZDsKKworICBwdGhyZWFkX211dGV4X2luaXQgKCZtdXQsIE5VTEwpOworICBw dGhyZWFkX2NvbmRfaW5pdCAoJmNvbmQsIE5VTEwpOworCisgIC8qIFdhaXQg Zm9yIGEgY29uZGl0aW9uIHRoYXQgd2lsbCBuZXZlciBiZSBzaWduYWxlZCwg c28gd2UgZWZmZWN0aXZlbHkKKyAgICAgYmxvY2sgdGhlIHRocmVhZCBoZXJl LiAgKi8KKyAgY29uZF93YWl0ICgmY29uZCwgJm11dCk7Cit9CisKK3ZvaWQg KgordGhyZWFkX2VudHJ5ICh2b2lkICp1bnVzZWQpCit7CisgIGluY3JfdGhy ZWFkX2NvdW50ICgpOworICBub3JldHVybiAoKTsKK30KKwordm9pZAorc2ln YWJydF9oYW5kbGVyIChpbnQgc2lnbm8pCit7CisgIHNpZ2FicnRfcmVjZWl2 ZWQgPSAxOworfQorCisvKiBIZWxwZXIgdG8gdGVzdCBhIGhhbmQtY2FsbCBi ZWluZyAiaW50ZXJydXB0ZWQiIGJ5IGEgc2lnbmFsIG9uIGFub3RoZXIKKyAg IHRocmVhZC4gICovCisKK3ZvaWQKK2hhbmRfY2FsbF93aXRoX3NpZ25hbCAo dm9pZCkKK3sKKyAgY29uc3Qgc3RydWN0IHRpbWVzcGVjIHRzID0geyAwLCAx MDAwMDAwMCB9OyAvKiAwLjAxIHNlYyAqLworCisgIHNpZ2FicnRfcmVjZWl2 ZWQgPSAwOworICBwdGhyZWFkX2tpbGwgKHRocmVhZHNbMF0sIFNJR0FCUlQp OworICB3aGlsZSAoISBzaWdhYnJ0X3JlY2VpdmVkKQorICAgIG5hbm9zbGVl cCAoJnRzLCBOVUxMKTsKK30KKworLyogV2FpdCB1bnRpbCBhbGwgdGhyZWFk cyBhcmUgcnVubmluZy4gICovCisKK3ZvaWQKK3dhaXRfYWxsX3RocmVhZHNf cnVubmluZyAodm9pZCkKK3sKKyAgcHRocmVhZF9tdXRleF9sb2NrICgmdGhy ZWFkX2NvdW50X211dGV4KTsKKyAgaWYgKHRocmVhZF9jb3VudCA9PSBOUl9U SFJFQURTKQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgm dGhyZWFkX2NvdW50X211dGV4KTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg IHB0aHJlYWRfY29uZF93YWl0ICgmdGhyZWFkX2NvdW50X2NvbmR2YXIsICZ0 aHJlYWRfY291bnRfbXV0ZXgpOworICBpZiAodGhyZWFkX2NvdW50ID09IE5S X1RIUkVBRFMpCisgICAgeworICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sg KCZ0aHJlYWRfY291bnRfbXV0ZXgpOworICAgICAgcmV0dXJuOworICAgIH0K KyAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZ0aHJlYWRfY291bnRfbXV0ZXgp OworICBwcmludGYgKCJmYWlsZWQgd2FpdGluZyBmb3IgYWxsIHRocmVhZHMg dG8gc3RhcnRcbiIpOworICBhYm9ydCAoKTsKK30KKworLyogQ2FsbGVkIHdo ZW4gYWxsIHRocmVhZHMgYXJlIHJ1bm5pbmcuCisgICBFYXN5IHBsYWNlIGZv ciBhIGJyZWFrcG9pbnQuICAqLworCit2b2lkCithbGxfdGhyZWFkc19ydW5u aW5nICh2b2lkKQoreworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIGlu dCBpOworCisgIHNpZ25hbCAoU0lHQUJSVCwgc2lnYWJydF9oYW5kbGVyKTsK KworICBwdGhyZWFkX211dGV4X2luaXQgKCZ0aHJlYWRfY291bnRfbXV0ZXgs IE5VTEwpOworICBwdGhyZWFkX2NvbmRfaW5pdCAoJnRocmVhZF9jb3VudF9j b25kdmFyLCBOVUxMKTsKKworICBmb3IgKGkgPSAwOyBpIDwgTlJfVEhSRUFE UzsgKytpKQorICAgIHB0aHJlYWRfY3JlYXRlICgmdGhyZWFkc1tpXSwgTlVM TCwgdGhyZWFkX2VudHJ5LCBOVUxMKTsKKworICB3YWl0X2FsbF90aHJlYWRz X3J1bm5pbmcgKCk7CisgIGFsbF90aHJlYWRzX3J1bm5pbmcgKCk7CisKKyAg cmV0dXJuIDA7Cit9CisKSW5kZXg6IHRlc3RzdWl0ZS9nZGIudGhyZWFkcy9p bnRlcnJ1cHRlZC1oYW5kLWNhbGwuZXhwCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIudGhyZWFkcy9pbnRlcnJ1cHRl ZC1oYW5kLWNhbGwuZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi50aHJlYWRz L2ludGVycnVwdGVkLWhhbmQtY2FsbC5leHAKLS0tIC9kZXYvbnVsbAkxIEph biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLnRocmVh ZHMvaW50ZXJydXB0ZWQtaGFuZC1jYWxsLmV4cAkxOSBKYW4gMjAwOSAwMTow ODo0NyAtMDAwMApAQCAtMCwwICsxLDkyIEBACisjIENvcHlyaWdodCAoQykg MjAwNCwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUZXN0IHJlY292ZXJpbmcgZnJv bSBhIGhhbmQgZnVuY3Rpb24gY2FsbCB0aGF0IGdldHMgaW50ZXJydXB0ZWQK KyMgYnkgYSBzaWduYWwgaW4gYW5vdGhlciB0aHJlYWQuCisKK3NldCBOUl9U SFJFQURTIDQKKworaWYgJHRyYWNlbGV2ZWwgdGhlbiB7CisJc3RyYWNlICR0 cmFjZWxldmVsCit9CisKK3NldCB0ZXN0ZmlsZSAiaW50ZXJydXB0ZWQtaGFu ZC1jYWxsIgorc2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uYworc2V0IGJpbmZp bGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfQorCitpZiB7W2dk Yl9jb21waWxlX3B0aHJlYWRzICIke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7c3Jj ZmlsZX0iICIke2JpbmZpbGV9IiBleGVjdXRhYmxlIFtsaXN0IGRlYnVnICJp bmNkaXI9JHtvYmpkaXJ9IiAiYWRkaXRpb25hbF9mbGFncz0tRE5SX1RIUkVB RFM9JE5SX1RIUkVBRFMiXV0gIT0gIiIgfSB7CisgICAgcmV0dXJuIC0xCit9 CisKKyMgU29tZSB0YXJnZXRzIGNhbid0IGRvIGZ1bmN0aW9uIGNhbGxzLCBz byBkb24ndCBldmVuIGJvdGhlciB3aXRoIHRoaXMKKyMgdGVzdC4KK2lmIFt0 YXJnZXRfaW5mbyBleGlzdHMgZ2RiLGNhbm5vdF9jYWxsX2Z1bmN0aW9uc10g eworICAgIHNldHVwX3hmYWlsICIqLSotKiIgMjQxNgorICAgIGZhaWwgIlRo aXMgdGFyZ2V0IGNhbiBub3QgY2FsbCBmdW5jdGlvbnMiCisgICAgY29udGlu dWUKK30KKworZ2RiX2V4aXQKK2dkYl9zdGFydAorZ2RiX3JlaW5pdGlhbGl6 ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCitnZGJfbG9hZCAke2JpbmZpbGV9CisK K2lmIHsgIVtydW50b19tYWluXSB9IHsKKyAgICBmYWlsICJDYW4ndCBydW4g dG8gbWFpbiIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAiYnJlYWsg YWxsX3RocmVhZHNfcnVubmluZyIgXAorICAgICAgICAgIkJyZWFrcG9pbnQg MiBhdCAuKjogZmlsZSAuKiR7c3JjZmlsZX0sIGxpbmUgLioiIFwKKyAgICAg ICAgICJicmVha3BvaW50IG9uIGFsbF90aHJlYWRzX3J1bm5pbmciCisKKyMg UnVuIHRoZSBwcm9ncmFtIGFuZCBtYWtlIHN1cmUgR0RCIHJlcG9ydHMgdGhh dCB3ZSBzdG9wcGVkIGFmdGVyCisjIGhpdHRpbmcgYnJlYWtwb2ludCAyIGlu IGFsbF90aHJlYWRzX3J1bm5pbmcoKS4KKworZ2RiX3Rlc3QgImNvbnRpbnVl IiBcCisgICAgICAgICAiLipCcmVha3BvaW50IDIsIGFsbF90aHJlYWRzX3J1 bm5pbmcgKCkuKiIgXAorICAgICAgICAgInJ1biB0byBhbGxfdGhyZWFkc19y dW5uaW5nIgorCisjIE5PVEU6IERvbid0IHR1cm4gb24gc2NoZWR1bGVyLWxv Y2tpbmcgaGVyZS4KKyMgV2Ugd2FudCB0aGUgbWFpbiB0aHJlYWQgKGhhbmRf Y2FsbF93aXRoX3NpZ25hbCkgYW5kCisjIHRocmVhZCAxIChzaWdhYnJ0X2hh bmRsZXIpIHRvIGJvdGggcnVuLgorCitnZGJfdGVzdCAiY2FsbCBoYW5kX2Nh bGxfd2l0aF9zaWduYWwoKSIgXAorICAgICIuKmluIGFub3RoZXIgdGhyZWFk LioiIFwKKyAgICAiaGFuZC1jYWxsIGludGVycnVwdGVkIGJ5IHNpZ25hbCBp biBhbm90aGVyIHRocmVhZCIKKworIyBWZXJpZnkgZHVtbXkgc3RhY2sgZnJh bWUgaXMgc3RpbGwgcHJlc2VudC4KKworZ2RiX3Rlc3QgIm1haW50IHByaW50 IGR1bW15LWZyYW1lcyIgIi4qc3RhY2s9LioiICJkdW1teSBzdGFjayBmcmFt ZSBwcmVzZW50IgorCisjIENvbnRpbnVpbmcgbm93IHNob3VsZCBleGl0IHRo ZSBoYW5kLWNhbGwgYW5kIHBvcCB0aGUgZHVtbXkgZnJhbWUuCisKK2dkYl90 ZXN0ICJjb250aW51ZSIgIiIgImZpbmlzaCBoYW5kLWNhbGwiCisKK2dkYl90 ZXN0X211bHRpcGxlICJtYWludCBwcmludCBkdW1teS1mcmFtZXMiICJkdW1t eSBmcmFtZSBwb3BwZWQiIHsKKyAgICAtcmUgIi4qc3RhY2s9LiokZ2RiX3By b21wdCAkIiB7CisJZmFpbCAiZHVtbXkgZnJhbWUgcG9wcGVkIgorICAgIH0K KyAgICAtcmUgIi4qJGdkYl9wcm9tcHQgJCIgeworCXBhc3MgImR1bW15IGZy YW1lIHBvcHBlZCIKKyAgICB9Cit9CisKKyMgQ29udGludWUgb25lIGxhc3Qg dGltZSwgdGhlIHByb2dyYW0gc2hvdWxkIGV4aXQgbm9ybWFsbHkuCisKK2dk Yl90ZXN0ICJjb250aW51ZSIgIlByb2dyYW0gZXhpdGVkIG5vcm1hbGx5LiIg XAorICAgICJjb250aW51ZSB0byBwcm9ncmFtIGV4aXQiCisKK3JldHVybiAw CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkLXVud2luZG9u c2lnbmFsLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0 ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkLXVud2luZG9uc2lnbmFsLmV4 cApkaWZmIC1OIHRlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWQtdW53aW5k b25zaWduYWwuZXhwCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDow MCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVhZC11bndp bmRvbnNpZ25hbC5leHAJMTkgSmFuIDIwMDkgMDE6MDg6NDcgLTAwMDAKQEAg LTAsMCArMSwxMTcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisj IFRlc3QgdXNlIG9mIHVud2luZG9uc2lnbmFsIHdoZW4gYSBoYW5kIGZ1bmN0 aW9uIGNhbGwgdGhhdCBnZXRzIGludGVycnVwdGVkCisjIGJ5IGEgc2lnbmFs IGluIGFub3RoZXIgdGhyZWFkLgorCitzZXQgTlJfVEhSRUFEUyA0CisKK2lm ICR0cmFjZWxldmVsIHRoZW4geworCXN0cmFjZSAkdHJhY2VsZXZlbAorfQor CitzZXQgdGVzdGZpbGUgImludGVycnVwdGVkLWhhbmQtY2FsbCIKK3NldCBz cmNmaWxlICR7dGVzdGZpbGV9LmMKK3NldCBiaW5maWxlICR7b2JqZGlyfS8k e3N1YmRpcn0vJHt0ZXN0ZmlsZX0KKworaWYge1tnZGJfY29tcGlsZV9wdGhy ZWFkcyAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5m aWxlfSIgZXhlY3V0YWJsZSBbbGlzdCBkZWJ1ZyAiaW5jZGlyPSR7b2JqZGly fSIgImFkZGl0aW9uYWxfZmxhZ3M9LUROUl9USFJFQURTPSROUl9USFJFQURT Il1dICE9ICIiIH0geworICAgIHJldHVybiAtMQorfQorCisjIFNvbWUgdGFy Z2V0cyBjYW4ndCBkbyBmdW5jdGlvbiBjYWxscywgc28gZG9uJ3QgZXZlbiBi b3RoZXIgd2l0aCB0aGlzCisjIHRlc3QuCitpZiBbdGFyZ2V0X2luZm8gZXhp c3RzIGdkYixjYW5ub3RfY2FsbF9mdW5jdGlvbnNdIHsKKyAgICBzZXR1cF94 ZmFpbCAiKi0qLSoiIDI0MTYKKyAgICBmYWlsICJUaGlzIHRhcmdldCBjYW4g bm90IGNhbGwgZnVuY3Rpb25zIgorICAgIGNvbnRpbnVlCit9CisKK2dkYl9l eGl0CitnZGJfc3RhcnQKK2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIv JHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5maWxlfQorCitpZiB7ICFbcnVudG9f bWFpbl0gfSB7CisgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4iCisgICAg cmV0dXJuIDAKK30KKworZ2RiX3Rlc3QgImJyZWFrIGFsbF90aHJlYWRzX3J1 bm5pbmciIFwKKyAgICAgICAgICJCcmVha3BvaW50IDIgYXQgLio6IGZpbGUg Lioke3NyY2ZpbGV9LCBsaW5lIC4qIiBcCisgICAgICAgICAiYnJlYWtwb2lu dCBvbiBhbGxfdGhyZWFkc19ydW5uaW5nIgorCisjIFJ1biB0aGUgcHJvZ3Jh bSBhbmQgbWFrZSBzdXJlIEdEQiByZXBvcnRzIHRoYXQgd2Ugc3RvcHBlZCBh ZnRlcgorIyBoaXR0aW5nIGJyZWFrcG9pbnQgMiBpbiBhbGxfdGhyZWFkc19y dW5uaW5nKCkuCisKK2dkYl90ZXN0ICJjb250aW51ZSIgXAorICAgICAgICAg Ii4qQnJlYWtwb2ludCAyLCBhbGxfdGhyZWFkc19ydW5uaW5nICgpLioiIFwK KyAgICAgICAgICJydW4gdG8gYWxsX3RocmVhZHNfcnVubmluZyIKKworIyBO T1RFOiBEb24ndCB0dXJuIG9uIHNjaGVkdWxlci1sb2NraW5nIGhlcmUuCisj IFdlIHdhbnQgdGhlIG1haW4gdGhyZWFkIChoYW5kX2NhbGxfd2l0aF9zaWdu YWwpIGFuZAorIyB0aHJlYWQgMSAoc2lnYWJydF9oYW5kbGVyKSB0byBib3Ro IHJ1bi4KKworIyBEbyB0dXJuIG9uIHVud2luZG9uc2lnbmFsLgorIyBXZSB3 YW50IHRvIHRlc3QgZ2RiIGhhbmRsaW5nIG9mIHRoZSBjdXJyZW50IHRocmVh ZCBjaGFuZ2luZyB3aGVuCisjIHVud2luZG9uc2lnbmFsIGlzIGluIGVmZmVj dC4KK2dkYl90ZXN0ICJzZXQgdW53aW5kb25zaWduYWwgb24iIFwKKwkiIiBc CisJInNldHRpbmcgdW53aW5kb25zaWduYWwiCitnZGJfdGVzdCAic2hvdyB1 bndpbmRvbnNpZ25hbCIgXAorCSJVbndpbmRpbmcgb2Ygc3RhY2sgLiogaXMg b24uIiBcCisJInNob3dpbmcgdW53aW5kb25zaWduYWwiCisKK2dkYl90ZXN0 ICJjYWxsIGhhbmRfY2FsbF93aXRoX3NpZ25hbCgpIiBcCisgICAgIlRoZSBw cm9ncmFtIHJlY2VpdmVkIGEgc2lnbmFsLioiIFwKKyAgICAiaGFuZC1jYWxs IGludGVycnVwdGVkIGJ5IHNpZ25hbCBpbiBhbm90aGVyIHRocmVhZCIKKwor IyBWZXJpZnkgZHVtbXkgc3RhY2sgZnJhbWUgaXMgc3RpbGwgcHJlc2VudC4K KyMgPz8/IFNob3VsZCB1bndpbmRvbnNpZ25hbCBzdGlsbCBhcHBseSBldmVu IGlmIHRoZSBwcm9ncmFtIHN0b3BzCisjIGJlY2F1c2Ugb2YgYSBzaWduYWwg aW4gYW5vdGhlciB0aHJlYWQ/CisKK2dkYl90ZXN0ICJtYWludCBwcmludCBk dW1teS1mcmFtZXMiICIuKnN0YWNrPS4qIiAiZHVtbXkgc3RhY2sgZnJhbWUg cHJlc2VudCIKKworIyBHREIgNi44IHdvdWxkIHBlcmZvcm0gdGhlIHVud2lu ZG9uc2lnbmFsLCBidXQgb24gdGhlIHRocmVhZCB0aGF0IHN0b3BwZWQsCisj IG5vdCB0aGUgdGhyZWFkIHdpdGggdGhlIGhhbmQtY2FsbGVkIGZ1bmN0aW9u LgorIyBUaGlzIGlzIHRlc3RlZCBieSB2ZXJpZnlpbmcgb25seSBvbmUgdGhy ZWFkIGhhcyBtYWluIGluIGl0cyBiYWNrdHJhY2UuCisKK2dkYl90ZXN0X211 bHRpcGxlICJ0aHJlYWQgYXBwbHkgYWxsIGJ0IiAid3JvbmcgdGhyZWFkIG5v dCB1bndvdW5kIiB7CisgICAgLXJlICIuKiBpbiBtYWluIC4qIGluIG1haW4g LiokZ2RiX3Byb21wdCAkIiB7CisJZmFpbCAid3JvbmcgdGhyZWFkIG5vdCB1 bndvdW5kIgorICAgIH0KKyAgICAtcmUgIi4qIGluIG1haW4gLiokZ2RiX3By b21wdCAkIiB7CisJcGFzcyAid3JvbmcgdGhyZWFkIG5vdCB1bndvdW5kIgor ICAgIH0KK30KKworIyBDb250aW51aW5nIG5vdyBzaG91bGQgZXhpdCB0aGUg aGFuZC1jYWxsIGFuZCBwb3AgdGhlIGR1bW15IGZyYW1lLgorCitnZGJfdGVz dCAiY29udGludWUiICIiICJmaW5pc2ggaGFuZC1jYWxsIgorCitnZGJfdGVz dF9tdWx0aXBsZSAibWFpbnQgcHJpbnQgZHVtbXktZnJhbWVzIiAiZHVtbXkg ZnJhbWUgcG9wcGVkIiB7CisgICAgLXJlICIuKnN0YWNrPS4qJGdkYl9wcm9t cHQgJCIgeworCWZhaWwgImR1bW15IGZyYW1lIHBvcHBlZCIKKyAgICB9Cisg ICAgLXJlICIuKiRnZGJfcHJvbXB0ICQiIHsKKwlwYXNzICJkdW1teSBmcmFt ZSBwb3BwZWQiCisgICAgfQorfQorCisjIENvbnRpbnVlIG9uZSBsYXN0IHRp bWUsIHRoZSBwcm9ncmFtIHNob3VsZCBleGl0IG5vcm1hbGx5LgorCitnZGJf dGVzdCAiY29udGludWUiICJQcm9ncmFtIGV4aXRlZCBub3JtYWxseS4iIFwK KyAgICAiY29udGludWUgdG8gcHJvZ3JhbSBleGl0IgorCityZXR1cm4gMAo= --000e0cd1461458728b0460d0d096--