From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5832 invoked by alias); 21 Oct 2009 16:53:52 -0000 Received: (qmail 5813 invoked by uid 22791); 21 Oct 2009 16:53:49 -0000 X-SWARE-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_50,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-ew0-f226.google.com (HELO mail-ew0-f226.google.com) (209.85.219.226) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 21 Oct 2009 16:53:40 +0000 Received: by ewy26 with SMTP id 26so6683386ewy.29 for ; Wed, 21 Oct 2009 09:53:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.89.76 with SMTP id b54mr2955871wef.105.1256144017365; Wed, 21 Oct 2009 09:53:37 -0700 (PDT) In-Reply-To: References: <20090806214216.GA14439@lucon.org> <84fc9c000910171235p6f23ba3at22436dad2c4a22ca@mail.gmail.com> <6dc9ffc80910171246v19b116eby6ae6b01803e3affa@mail.gmail.com> <84fc9c000910171301xd87370eyada33fd9ae1bfd75@mail.gmail.com> <6dc9ffc80910190936j5d629f1fw1e2a83b96492b3fc@mail.gmail.com> <6dc9ffc80910201407i50d701fdo4a2cbf97faa1745@mail.gmail.com> <6dc9ffc80910201709y1ef5b914v113dd33b9bf0f809@mail.gmail.com> Date: Wed, 21 Oct 2009 16:56:00 -0000 Message-ID: <6dc9ffc80910210953oee41a4eo9dcfdd248af739ce@mail.gmail.com> Subject: Re: PATCH: PR target/40838: gcc shouldn't assume that the stack is aligned From: "H.J. Lu" To: Michael Matz Cc: Richard Guenther , Ian Lance Taylor , Uros Bizjak , gcc-patches@gcc.gnu.org, Jakub Jelinek Content-Type: multipart/mixed; boundary=0016e6d7ec20f1246e047674d119 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2009-10/txt/msg01366.txt.bz2 --0016e6d7ec20f1246e047674d119 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1805 On Wed, Oct 21, 2009 at 2:05 AM, Michael Matz wrote: > Hi, > > On Tue, 20 Oct 2009, H.J. Lu wrote: > >> > Here is a new patch. I added hard_stack_alignment, moved >> > update_stack_boundary after RTL expansion and updated >> > ix86_function_ok_for_sibcall to deal with it. =A0Any comments? > > Well, I think this approach of tracking the required alignment (in > gen_reg_rtx especially) is indeed better. > Here is the updated patch. We don't need to add hard_stack_alignment. We can initialize stack_alignment_estimated to 0 and check it instead. Tested it on Linux/x86-64 with -m32. OK for trunk? Thanks. --=20 H.J. --- gcc/ 2009-10-21 H.J. Lu PR target/40836 * cfgexpand.c (expand_stack_alignment): Call update_stack_boundary first. Move assert on stack_alignment_estimated just before setting stack_realign_needed. (gimple_expand_cfg): Initialize stack_alignment_estimated to 0. Don't call update_stack_boundary. * config/i386/i386.c (ix86_minimum_incoming_stack_boundary): New. (verride_options): Don't check ix86_force_align_arg_pointer here. (ix86_function_ok_for_sibcall): Use it. (ix86_update_stack_boundary): Likewise. * config/i386/i386.h (STACK_REALIGN_DEFAULT): Update comments. gcc/testsuite/ 2009-10-21 H.J. Lu PR target/40838 * gcc.target/i386/incoming-6.c: New. * gcc.target/i386/incoming-7.c: Likewise. * gcc.target/i386/incoming-8.c: Likewise. * gcc.target/i386/incoming-9.c: Likewise. * gcc.target/i386/incoming-10.c: Likewise. * gcc.target/i386/incoming-11.c: Likewise. * gcc.target/i386/incoming-12.c: Likewise. * gcc.target/i386/incoming-13.c: Likewise. * gcc.target/i386/incoming-14.c: Likewise. * gcc.target/i386/incoming-15.c: Likewise. * gcc.target/i386/pr37843-4.c: Likewise. --0016e6d7ec20f1246e047674d119 Content-Type: text/plain; charset=US-ASCII; name="gcc-pr40838-10.patch" Content-Disposition: attachment; filename="gcc-pr40838-10.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g12bowma1 Content-length: 22180 Z2NjLwoKMjAwOS0xMC0yMSAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwu Y29tPgoKCVBSIHRhcmdldC80MDgzNgoJKiBjZmdleHBhbmQuYyAoZXhwYW5k X3N0YWNrX2FsaWdubWVudCk6IENhbGwgdXBkYXRlX3N0YWNrX2JvdW5kYXJ5 CglmaXJzdC4gIE1vdmUgYXNzZXJ0IG9uIHN0YWNrX2FsaWdubWVudF9lc3Rp bWF0ZWQganVzdCBiZWZvcmUKCXNldHRpbmcgc3RhY2tfcmVhbGlnbl9uZWVk ZWQuCgkoZ2ltcGxlX2V4cGFuZF9jZmcpOiBJbml0aWFsaXplIHN0YWNrX2Fs aWdubWVudF9lc3RpbWF0ZWQgdG8gMC4KCURvbid0IGNhbGwgdXBkYXRlX3N0 YWNrX2JvdW5kYXJ5LgoKCSogY29uZmlnL2kzODYvaTM4Ni5jIChpeDg2X21p bmltdW1faW5jb21pbmdfc3RhY2tfYm91bmRhcnkpOiBOZXcuCgkodmVycmlk ZV9vcHRpb25zKTogRG9uJ3QgY2hlY2sgaXg4Nl9mb3JjZV9hbGlnbl9hcmdf cG9pbnRlciBoZXJlLgoJKGl4ODZfZnVuY3Rpb25fb2tfZm9yX3NpYmNhbGwp OiBVc2UgaXQuCgkoaXg4Nl91cGRhdGVfc3RhY2tfYm91bmRhcnkpOiBMaWtl d2lzZS4KCgkqIGNvbmZpZy9pMzg2L2kzODYuaCAoU1RBQ0tfUkVBTElHTl9E RUZBVUxUKTogVXBkYXRlIGNvbW1lbnRzLgoKZ2NjL3Rlc3RzdWl0ZS8KCjIw MDktMTAtMjEgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KCglQ UiB0YXJnZXQvNDA4MzgKCSogZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTYu YzogTmV3LgoJKiBnY2MudGFyZ2V0L2kzODYvaW5jb21pbmctNy5jOiBMaWtl d2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTguYzogTGlrZXdp c2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9pbmNvbWluZy05LmM6IExpa2V3aXNl LgoJKiBnY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTAuYzogTGlrZXdpc2Uu CgkqIGdjYy50YXJnZXQvaTM4Ni9pbmNvbWluZy0xMS5jOiBMaWtld2lzZS4K CSogZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTEyLmM6IExpa2V3aXNlLgoJ KiBnY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTMuYzogTGlrZXdpc2UuCgkq IGdjYy50YXJnZXQvaTM4Ni9pbmNvbWluZy0xNC5jOiBMaWtld2lzZS4KCSog Z2NjLnRhcmdldC9pMzg2L2luY29taW5nLTE1LmM6IExpa2V3aXNlLgoJKiBn Y2MudGFyZ2V0L2kzODYvcHIzNzg0My00LmM6IExpa2V3aXNlLgoKZGlmZiAt LWdpdCBhL2djYy9jZmdleHBhbmQuYyBiL2djYy9jZmdleHBhbmQuYwppbmRl eCAyNjc4ZDdlLi5hNGI4ZTRmIDEwMDY0NAotLS0gYS9nY2MvY2ZnZXhwYW5k LmMKKysrIGIvZ2NjL2NmZ2V4cGFuZC5jCkBAIC0zNDMwLDggKzM0MzAsMTgg QEAgZXhwYW5kX3N0YWNrX2FsaWdubWVudCAodm9pZCkKICAgICAgIHx8IGNy dGwtPmhhc19ub25sb2NhbF9nb3RvKQogICAgIGNydGwtPm5lZWRfZHJhcCA9 IHRydWU7CiAKLSAgZ2NjX2Fzc2VydCAoY3J0bC0+c3RhY2tfYWxpZ25tZW50 X25lZWRlZAotCSAgICAgIDw9IGNydGwtPnN0YWNrX2FsaWdubWVudF9lc3Rp bWF0ZWQpOworICAvKiBDYWxsIHVwZGF0ZV9zdGFja19ib3VuZGFyeSBoZXJl IGFnYWluIHRvIHVwZGF0ZSBpbmNvbWluZyBzdGFjaworICAgICBib3VuZGFy eS4gIEl0IG1heSBzZXQgaW5jb21pbmcgc3RhY2sgYWxpZ25tZW50IHRvIGEg ZGlmZmVyZW50CisgICAgIHZhbHVlIGFmdGVyIFJUTCBleHBhbnNpb24uICBU QVJHRVRfRlVOQ1RJT05fT0tfRk9SX1NJQkNBTEwgbWF5CisgICAgIHVzZSB0 aGUgbWluaW11bSBpbmNvbWluZyBzdGFjayBhbGlnbm1lbnQgdG8gY2hlY2sg aWYgaXQgaXMgT0sKKyAgICAgdG8gcGVyZm9ybSBzaWJjYWxsIG9wdGltaXph dGlvbiBzaW5jZSBzaWJjYWxsIG9wdGltaXphdGlvbiB3aWxsCisgICAgIG9u bHkgYWxpZ24gdGhlIG91dGdvaW5nIHN0YWNrIHRvIGluY29taW5nIHN0YWNr IGJvdW5kYXJ5LiAgKi8KKyAgaWYgKHRhcmdldG0uY2FsbHMudXBkYXRlX3N0 YWNrX2JvdW5kYXJ5KQorICAgIHRhcmdldG0uY2FsbHMudXBkYXRlX3N0YWNr X2JvdW5kYXJ5ICgpOworCisgIC8qIFRoZSBpbmNvbWluZyBzdGFjayBmcmFt ZSBoYXMgdG8gYmUgYWxpZ25lZCBhdCBsZWFzdCBhdAorICAgICBwYXJtX3N0 YWNrX2JvdW5kYXJ5LiAgKi8KKyAgZ2NjX2Fzc2VydCAoY3J0bC0+cGFybV9z dGFja19ib3VuZGFyeSA8PSBJTkNPTUlOR19TVEFDS19CT1VOREFSWSk7CiAK ICAgLyogVXBkYXRlIGNydGwtPnN0YWNrX2FsaWdubWVudF9lc3RpbWF0ZWQg YW5kIHVzZSBpdCBsYXRlciB0byBhbGlnbgogICAgICBzdGFjay4gIFdlIGNo ZWNrIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSBpZiB0aGVyZSBtYXkgYmUg bm9uLWNhbGwKQEAgLTM0NDcsNiArMzQ1Nyw5IEBAIGV4cGFuZF9zdGFja19h bGlnbm1lbnQgKHZvaWQpCiAgIGlmIChwcmVmZXJyZWRfc3RhY2tfYm91bmRh cnkgPiBjcnRsLT5zdGFja19hbGlnbm1lbnRfbmVlZGVkKQogICAgIGNydGwt PnN0YWNrX2FsaWdubWVudF9uZWVkZWQgPSBwcmVmZXJyZWRfc3RhY2tfYm91 bmRhcnk7CiAKKyAgZ2NjX2Fzc2VydCAoY3J0bC0+c3RhY2tfYWxpZ25tZW50 X25lZWRlZAorCSAgICAgIDw9IGNydGwtPnN0YWNrX2FsaWdubWVudF9lc3Rp bWF0ZWQpOworCiAgIGNydGwtPnN0YWNrX3JlYWxpZ25fbmVlZGVkCiAgICAg PSBJTkNPTUlOR19TVEFDS19CT1VOREFSWSA8IGNydGwtPnN0YWNrX2FsaWdu bWVudF9lc3RpbWF0ZWQ7CiAgIGNydGwtPnN0YWNrX3JlYWxpZ25fdHJpZWQg PSBjcnRsLT5zdGFja19yZWFsaWduX25lZWRlZDsKQEAgLTM1MjMsNyArMzUz Niw3IEBAIGdpbXBsZV9leHBhbmRfY2ZnICh2b2lkKQogICB0YXJnZXRtLmV4 cGFuZF90b19ydGxfaG9vayAoKTsKICAgY3J0bC0+c3RhY2tfYWxpZ25tZW50 X25lZWRlZCA9IFNUQUNLX0JPVU5EQVJZOwogICBjcnRsLT5tYXhfdXNlZF9z dGFja19zbG90X2FsaWdubWVudCA9IFNUQUNLX0JPVU5EQVJZOwotICBjcnRs LT5zdGFja19hbGlnbm1lbnRfZXN0aW1hdGVkID0gU1RBQ0tfQk9VTkRBUlk7 CisgIGNydGwtPnN0YWNrX2FsaWdubWVudF9lc3RpbWF0ZWQgPSAwOwogICBj cnRsLT5wcmVmZXJyZWRfc3RhY2tfYm91bmRhcnkgPSBTVEFDS19CT1VOREFS WTsKICAgY2Z1bi0+Y2ZnLT5tYXhfanVtcHRhYmxlX2VudHMgPSAwOwogCkBA IC0zNTg3LDIzICszNjAwLDYgQEAgZ2ltcGxlX2V4cGFuZF9jZmcgKHZvaWQp CiAgIGlmIChjcnRsLT5zdGFja19wcm90ZWN0X2d1YXJkKQogICAgIHN0YWNr X3Byb3RlY3RfcHJvbG9ndWUgKCk7CiAKLSAgLyogVXBkYXRlIHN0YWNrIGJv dW5kYXJ5IGlmIG5lZWRlZC4gICovCi0gIGlmIChTVVBQT1JUU19TVEFDS19B TElHTk1FTlQpCi0gICAgewotICAgICAgLyogQ2FsbCB1cGRhdGVfc3RhY2tf Ym91bmRhcnkgaGVyZSB0byB1cGRhdGUgaW5jb21pbmcgc3RhY2sKLQkgYm91 bmRhcnkgYmVmb3JlIFRBUkdFVF9GVU5DVElPTl9PS19GT1JfU0lCQ0FMTCBp cyBjYWxsZWQuCi0JIFRBUkdFVF9GVU5DVElPTl9PS19GT1JfU0lCQ0FMTCBu ZWVkcyB0byBrbm93IHRoZSBhY2N1cmF0ZQotCSBpbmNvbWluZyBzdGFjayBh bGlnbm1lbnQgdG8gY2hlY2sgaWYgaXQgaXMgT0sgdG8gcGVyZm9ybQotCSBz aWJjYWxsIG9wdGltaXphdGlvbiBzaW5jZSBzaWJjYWxsIG9wdGltaXphdGlv biB3aWxsIG9ubHkKLQkgYWxpZ24gdGhlIG91dGdvaW5nIHN0YWNrIHRvIGlu Y29taW5nIHN0YWNrIGJvdW5kYXJ5LiAgKi8KLSAgICAgIGlmICh0YXJnZXRt LmNhbGxzLnVwZGF0ZV9zdGFja19ib3VuZGFyeSkKLQl0YXJnZXRtLmNhbGxz LnVwZGF0ZV9zdGFja19ib3VuZGFyeSAoKTsKLSAgICAgIAotICAgICAgLyog VGhlIGluY29taW5nIHN0YWNrIGZyYW1lIGhhcyB0byBiZSBhbGlnbmVkIGF0 IGxlYXN0IGF0Ci0JIHBhcm1fc3RhY2tfYm91bmRhcnkuICAqLwotICAgICAg Z2NjX2Fzc2VydCAoY3J0bC0+cGFybV9zdGFja19ib3VuZGFyeSA8PSBJTkNP TUlOR19TVEFDS19CT1VOREFSWSk7Ci0gICAgfQotCiAgIGV4cGFuZF9waGlf bm9kZXMgKCZTQSk7CiAKICAgLyogUmVnaXN0ZXIgcnRsIHNwZWNpZmljIGZ1 bmN0aW9ucyBmb3IgY2ZnLiAgKi8KZGlmZiAtLWdpdCBhL2djYy9jb25maWcv aTM4Ni9pMzg2LmMgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCmluZGV4IDYw NjVmNDkuLmUyMjJmNzIgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9p Mzg2LmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwpAQCAtMTkwNSw2 ICsxOTA1LDcgQEAgc3RhdGljIGJvb2wgaXg4Nl92YWxpZF90YXJnZXRfYXR0 cmlidXRlX3AgKHRyZWUsIHRyZWUsIHRyZWUsIGludCk7CiBzdGF0aWMgYm9v bCBpeDg2X3ZhbGlkX3RhcmdldF9hdHRyaWJ1dGVfaW5uZXJfcCAodHJlZSwg Y2hhciAqW10pOwogc3RhdGljIGJvb2wgaXg4Nl9jYW5faW5saW5lX3AgKHRy ZWUsIHRyZWUpOwogc3RhdGljIHZvaWQgaXg4Nl9zZXRfY3VycmVudF9mdW5j dGlvbiAodHJlZSk7CitzdGF0aWMgdW5zaWduZWQgaW50IGl4ODZfbWluaW11 bV9pbmNvbWluZ19zdGFja19ib3VuZGFyeSAoYm9vbCk7CiAKIHN0YXRpYyBl bnVtIGNhbGxpbmdfYWJpIGl4ODZfZnVuY3Rpb25fYWJpIChjb25zdF90cmVl KTsKIApAQCAtMzIzOSwxMiArMzI0MCwxMCBAQCBvdmVycmlkZV9vcHRpb25z IChib29sIG1haW5fYXJnc19wKQogICBpZiAoaXg4Nl9mb3JjZV9hbGlnbl9h cmdfcG9pbnRlciA9PSAtMSkKICAgICBpeDg2X2ZvcmNlX2FsaWduX2FyZ19w b2ludGVyID0gU1RBQ0tfUkVBTElHTl9ERUZBVUxUOwogCisgIGl4ODZfZGVm YXVsdF9pbmNvbWluZ19zdGFja19ib3VuZGFyeSA9IFBSRUZFUlJFRF9TVEFD S19CT1VOREFSWTsKKwogICAvKiBWYWxpZGF0ZSAtbWluY29taW5nLXN0YWNr LWJvdW5kYXJ5PSB2YWx1ZSBvciBkZWZhdWx0IGl0IHRvCiAgICAgIE1JTl9T VEFDS19CT1VOREFSWS9QUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuICAqLwot ICBpZiAoaXg4Nl9mb3JjZV9hbGlnbl9hcmdfcG9pbnRlcikKLSAgICBpeDg2 X2RlZmF1bHRfaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPSBNSU5fU1RBQ0tf Qk9VTkRBUlk7Ci0gIGVsc2UKLSAgICBpeDg2X2RlZmF1bHRfaW5jb21pbmdf c3RhY2tfYm91bmRhcnkgPSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlk7CiAg IGl4ODZfaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPSBpeDg2X2RlZmF1bHRf aW5jb21pbmdfc3RhY2tfYm91bmRhcnk7CiAgIGlmIChpeDg2X2luY29taW5n X3N0YWNrX2JvdW5kYXJ5X3N0cmluZykKICAgICB7CkBAIC00Mjc3LDcgKzQy NzYsOCBAQCBpeDg2X2Z1bmN0aW9uX29rX2Zvcl9zaWJjYWxsICh0cmVlIGRl Y2wsIHRyZWUgZXhwKQogCiAgIC8qIElmIHdlIG5lZWQgdG8gYWxpZ24gdGhl IG91dGdvaW5nIHN0YWNrLCB0aGVuIHNpYmNhbGxpbmcgd291bGQKICAgICAg dW5hbGlnbiB0aGUgc3RhY2ssIHdoaWNoIG1heSBicmVhayB0aGUgY2FsbGVk IGZ1bmN0aW9uLiAgKi8KLSAgaWYgKGl4ODZfaW5jb21pbmdfc3RhY2tfYm91 bmRhcnkgPCBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkpCisgIGlmIChpeDg2 X21pbmltdW1faW5jb21pbmdfc3RhY2tfYm91bmRhcnkgKHRydWUpCisgICAg ICA8IFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSkKICAgICByZXR1cm4gZmFs c2U7CiAKICAgaWYgKGRlY2wpCkBAIC04MTk2LDM3ICs4MTk2LDU4IEBAIGZp bmRfZHJhcF9yZWcgKHZvaWQpCiAgICAgfQogfQogCi0vKiBVcGRhdGUgaW5j b21pbmcgc3RhY2sgYm91bmRhcnkgYW5kIGVzdGltYXRlZCBzdGFjayBhbGln bm1lbnQuICAqLworLyogUmV0dXJuIG1pbmltdW0gaW5jb21pbmcgc3RhY2sg YWxpZ25tZW50LiAgKi8KIAotc3RhdGljIHZvaWQKLWl4ODZfdXBkYXRlX3N0 YWNrX2JvdW5kYXJ5ICh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGludAoraXg4 Nl9taW5pbXVtX2luY29taW5nX3N0YWNrX2JvdW5kYXJ5IChib29sIHNpYmNh bGwpCiB7CisgIHVuc2lnbmVkIGludCBpbmNvbWluZ19zdGFja19ib3VuZGFy eTsKKwogICAvKiBQcmVmZXIgdGhlIG9uZSBzcGVjaWZpZWQgYXQgY29tbWFu ZCBsaW5lLiAqLwotICBpeDg2X2luY29taW5nX3N0YWNrX2JvdW5kYXJ5IAot ICAgID0gKGl4ODZfdXNlcl9pbmNvbWluZ19zdGFja19ib3VuZGFyeQotICAg ICAgID8gaXg4Nl91c2VyX2luY29taW5nX3N0YWNrX2JvdW5kYXJ5Ci0gICAg ICAgOiBpeDg2X2RlZmF1bHRfaW5jb21pbmdfc3RhY2tfYm91bmRhcnkpOwor ICBpZiAoaXg4Nl91c2VyX2luY29taW5nX3N0YWNrX2JvdW5kYXJ5KQorICAg IGluY29taW5nX3N0YWNrX2JvdW5kYXJ5ID0gaXg4Nl91c2VyX2luY29taW5n X3N0YWNrX2JvdW5kYXJ5OworICAvKiBJbiAzMmJpdCwgdXNlIE1JTl9TVEFD S19CT1VOREFSWSBmb3IgaW5jb21pbmcgc3RhY2sgYm91bmRhcnkKKyAgICAg aWYgLW1zdGFja3JlYWxpZ24gaXMgdXNlZCwgaXQgaXNuJ3QgdXNlZCBmb3Ig c2liY2FsbCBjaGVjayBhbmQgCisgICAgIGVzdGltYXRlZCBzdGFjayBhbGln bm1lbnQgaXMgMTI4Yml0LiAgKi8KKyAgZWxzZSBpZiAoIXNpYmNhbGwKKwkg ICAmJiAhVEFSR0VUXzY0QklUCisJICAgJiYgaXg4Nl9mb3JjZV9hbGlnbl9h cmdfcG9pbnRlcgorCSAgICYmIGNydGwtPnN0YWNrX2FsaWdubWVudF9lc3Rp bWF0ZWQgPT0gMTI4KQorICAgIGluY29taW5nX3N0YWNrX2JvdW5kYXJ5ID0g TUlOX1NUQUNLX0JPVU5EQVJZOworICBlbHNlCisgICAgaW5jb21pbmdfc3Rh Y2tfYm91bmRhcnkgPSBpeDg2X2RlZmF1bHRfaW5jb21pbmdfc3RhY2tfYm91 bmRhcnk7CiAKICAgLyogSW5jb21pbmcgc3RhY2sgYWxpZ25tZW50IGNhbiBi ZSBjaGFuZ2VkIG9uIGluZGl2aWR1YWwgZnVuY3Rpb25zCiAgICAgIHZpYSBm b3JjZV9hbGlnbl9hcmdfcG9pbnRlciBhdHRyaWJ1dGUuICBXZSB1c2UgdGhl IHNtYWxsZXN0CiAgICAgIGluY29taW5nIHN0YWNrIGJvdW5kYXJ5LiAgKi8K LSAgaWYgKGl4ODZfaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPiBNSU5fU1RB Q0tfQk9VTkRBUlkKKyAgaWYgKGluY29taW5nX3N0YWNrX2JvdW5kYXJ5ID4g TUlOX1NUQUNLX0JPVU5EQVJZCiAgICAgICAmJiBsb29rdXBfYXR0cmlidXRl IChpeDg2X2ZvcmNlX2FsaWduX2FyZ19wb2ludGVyX3N0cmluZywKIAkJCSAg IFRZUEVfQVRUUklCVVRFUyAoVFJFRV9UWVBFIChjdXJyZW50X2Z1bmN0aW9u X2RlY2wpKSkpCi0gICAgaXg4Nl9pbmNvbWluZ19zdGFja19ib3VuZGFyeSA9 IE1JTl9TVEFDS19CT1VOREFSWTsKKyAgICBpbmNvbWluZ19zdGFja19ib3Vu ZGFyeSA9IE1JTl9TVEFDS19CT1VOREFSWTsKIAogICAvKiBUaGUgaW5jb21p bmcgc3RhY2sgZnJhbWUgaGFzIHRvIGJlIGFsaWduZWQgYXQgbGVhc3QgYXQK ICAgICAgcGFybV9zdGFja19ib3VuZGFyeS4gICovCi0gIGlmIChpeDg2X2lu Y29taW5nX3N0YWNrX2JvdW5kYXJ5IDwgY3J0bC0+cGFybV9zdGFja19ib3Vu ZGFyeSkKLSAgICBpeDg2X2luY29taW5nX3N0YWNrX2JvdW5kYXJ5ID0gY3J0 bC0+cGFybV9zdGFja19ib3VuZGFyeTsKKyAgaWYgKGluY29taW5nX3N0YWNr X2JvdW5kYXJ5IDwgY3J0bC0+cGFybV9zdGFja19ib3VuZGFyeSkKKyAgICBp bmNvbWluZ19zdGFja19ib3VuZGFyeSA9IGNydGwtPnBhcm1fc3RhY2tfYm91 bmRhcnk7CiAKICAgLyogU3RhY2sgYXQgZW50cmFuY2Ugb2YgbWFpbiBpcyBh bGlnbmVkIGJ5IHJ1bnRpbWUuICBXZSB1c2UgdGhlCiAgICAgIHNtYWxsZXN0 IGluY29taW5nIHN0YWNrIGJvdW5kYXJ5LiAqLwotICBpZiAoaXg4Nl9pbmNv bWluZ19zdGFja19ib3VuZGFyeSA+IE1BSU5fU1RBQ0tfQk9VTkRBUlkKKyAg aWYgKGluY29taW5nX3N0YWNrX2JvdW5kYXJ5ID4gTUFJTl9TVEFDS19CT1VO REFSWQogICAgICAgJiYgREVDTF9OQU1FIChjdXJyZW50X2Z1bmN0aW9uX2Rl Y2wpCiAgICAgICAmJiBNQUlOX05BTUVfUCAoREVDTF9OQU1FIChjdXJyZW50 X2Z1bmN0aW9uX2RlY2wpKQogICAgICAgJiYgREVDTF9GSUxFX1NDT1BFX1Ag KGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpCi0gICAgaXg4Nl9pbmNvbWluZ19z dGFja19ib3VuZGFyeSA9IE1BSU5fU1RBQ0tfQk9VTkRBUlk7CisgICAgaW5j b21pbmdfc3RhY2tfYm91bmRhcnkgPSBNQUlOX1NUQUNLX0JPVU5EQVJZOwor CisgIHJldHVybiBpbmNvbWluZ19zdGFja19ib3VuZGFyeTsKK30KKworLyog VXBkYXRlIGluY29taW5nIHN0YWNrIGJvdW5kYXJ5IGFuZCBlc3RpbWF0ZWQg c3RhY2sgYWxpZ25tZW50LiAgKi8KKworc3RhdGljIHZvaWQKK2l4ODZfdXBk YXRlX3N0YWNrX2JvdW5kYXJ5ICh2b2lkKQoreworICBpeDg2X2luY29taW5n X3N0YWNrX2JvdW5kYXJ5CisgICAgPSBpeDg2X21pbmltdW1faW5jb21pbmdf c3RhY2tfYm91bmRhcnkgKGZhbHNlKTsKIAogICAvKiB4ODZfNjQgdmFyYXJn IG5lZWRzIDE2Ynl0ZSBzdGFjayBhbGlnbm1lbnQgZm9yIHJlZ2lzdGVyIHNh dmUKICAgICAgYXJlYS4gICovCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kz ODYvaTM4Ni5oIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaAppbmRleCAzM2E1 MDc3Li4yMjE4N2E5IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvaTM4 Ni5oCisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LmgKQEAgLTcwNiw5ICs3 MDYsNyBAQCBlbnVtIHRhcmdldF9jcHVfZGVmYXVsdAogICAgZ2VuZXJhdGUg YW4gYWx0ZXJuYXRlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSB0aGF0IHJlYWxp Z25zIHRoZQogICAgcnVudGltZSBzdGFjayBpZiBuZXNzYXJ5LiAgVGhpcyBz dXBwb3J0cyBtaXhpbmcgY29kZXMgdGhhdCBrZWVwIGEKICAgIDQtYnl0ZSBh bGlnbmVkIHN0YWNrLCBhcyBzcGVjaWZpZWQgYnkgaTM4NiBwc0FCSSwgd2l0 aCBjb2RlcyB0aGF0Ci0gICBuZWVkIGEgMTYtYnl0ZSBhbGlnbmVkIHN0YWNr LCBhcyByZXF1aXJlZCBieSBTU0UgaW5zdHJ1Y3Rpb25zLiAgSWYKLSAgIFNU QUNLX1JFQUxJR05fREVGQVVMVCBpcyAxIGFuZCBQUkVGRVJSRURfU1RBQ0tf Qk9VTkRBUllfREVGQVVMVCBpcwotICAgMTI4LCBzdGFja3MgZm9yIGFsbCBm dW5jdGlvbnMgbWF5IGJlIHJlYWxpZ25lZC4gICovCisgICBuZWVkIGEgMTYt Ynl0ZSBhbGlnbmVkIHN0YWNrLCBhcyByZXF1aXJlZCBieSBTU0UgaW5zdHJ1 Y3Rpb25zLiAgKi8KICNkZWZpbmUgU1RBQ0tfUkVBTElHTl9ERUZBVUxUIDAK IAogLyogQm91bmRhcnkgKGluICpiaXRzKikgb24gd2hpY2ggdGhlIGluY29t aW5nIHN0YWNrIGlzIGFsaWduZWQuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTAuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTEwLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkOWU2MQotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2lu Y29taW5nLTEwLmMKQEAgLTAsMCArMSwxOSBAQAorLyogUFIgdGFyZ2V0LzQw ODM4ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyB7ICEgKi0q LWRhcndpbiogfSAmJiBpbHAzMiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25z ICItdyAtbXN0YWNrcmVhbGlnbiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMg LW1hcmNoPWJhcmNlbG9uYSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00 IiB9ICovCisKK3N0cnVjdCBzIHsKKwlpbnQgeFs4XTsKK307CisKK3ZvaWQg ZyhzdHJ1Y3QgcyAqKTsKKwordm9pZCBmKCkKK3sKKwlpbnQgaTsKKwlzdHJ1 Y3QgcyBzOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yocy54KSAvIHNpemVv Zigqcy54KTsgaSsrKSBzLnhbaV0gPSAwOworCWcoJnMpOworfQorCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImFuZGxcW1xcdCBcXSpcXCQt MTYsXFtcXHQgXF0qJWVzcCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy0xMS5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctMTEuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTc4N2FmCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5j b21pbmctMTEuYwpAQCAtMCwwICsxLDE4IEBACisvKiBQUiB0YXJnZXQvNDA4 MzggKi8KKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7IHsgISAqLSot ZGFyd2luKiB9ICYmIGlscDMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii13IC1tc3RhY2tyZWFsaWduIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAt bWFyY2g9YmFyY2Vsb25hIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQi IH0gKi8KKwordm9pZCBnKCk7CisKK2ludCBwWzEwMF07CitpbnQgcVsxMDBd OworCit2b2lkIGYoKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCAx MDA7IGkrKykgcFtpXSA9IDA7CisJZygpOworCWZvciAoaSA9IDA7IGkgPCAx MDA7IGkrKykgcVtpXSA9IDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlciAiYW5kbFxbXFx0IFxdKlxcJC0xNixcW1xcdCBcXSolZXNw IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2luY29taW5nLTEyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9pbmNvbWluZy0xMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmQ3ZWYxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy0xMi5jCkBAIC0w LDAgKzEsMjAgQEAKKy8qIFBSIHRhcmdldC80MDgzOCAqLworLyogeyBkZy1k byBjb21waWxlIHsgdGFyZ2V0IHsgeyAhICotKi1kYXJ3aW4qIH0gJiYgaWxw MzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLXcgLW1zdGFja3JlYWxp Z24gLU8yIC1tc3NlMiAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00IiB9 ICovCisKK3R5cGVkZWYgaW50IHY0c2kgX19hdHRyaWJ1dGVfXyAoKHZlY3Rv cl9zaXplICgxNikpKTsKKworc3RydWN0IHggeworICAgICAgIHY0c2kgdjsK KyAgICAgICB2NHNpIHc7Cit9OworCit2b2lkIHkodm9pZCAqKTsKKwordjRz aSB4KHZvaWQpCit7CisgICAgICAgc3RydWN0IHggeDsKKyAgICAgICB5KCZ4 KTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJhbmRs XFtcXHQgXF0qXFwkLTE2LFxbXFx0IFxdKiVlc3AiIH0gfSAqLwpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmct MTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2luY29taW5n LTEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJj ODk5MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2luY29taW5nLTEzLmMKQEAgLTAsMCArMSwxNSBAQAorLyog UFIgdGFyZ2V0LzQwODM4ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJn ZXQgeyB7ICEgKi0qLWRhcndpbiogfSAmJiBpbHAzMiB9IH0gfSAqLworLyog eyBkZy1vcHRpb25zICItdyAtbXN0YWNrcmVhbGlnbiAtTzIgLW1wcmVmZXJy ZWQtc3RhY2stYm91bmRhcnk9NCIgfSAqLworCitleHRlcm4gZG91YmxlIHko ZG91YmxlICpzMyk7CisKK2V4dGVybiBkb3VibGUgczEsIHMyOworCitkb3Vi bGUgeCh2b2lkKQoreworICBkb3VibGUgczMgPSBzMSArIHMyOworICByZXR1 cm4geSgmczMpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJhbmRsXFtcXHQgXF0qXFwkLTE2LFxbXFx0IFxdKiVlc3AiIH0g fSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvaW5jb21pbmctMTQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2luY29taW5nLTE0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZDI3MTc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTE0LmMKQEAgLTAsMCAr MSwxNSBAQAorLyogUFIgdGFyZ2V0LzQwODM4ICovCisvKiB7IGRnLWRvIGNv bXBpbGUgeyB0YXJnZXQgeyB7ICEgKi0qLWRhcndpbiogfSAmJiBpbHAzMiB9 IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItdyAtbXN0YWNrcmVhbGlnbiAt TzIgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NCIgfSAqLworCitleHRl cm4gaW50IHkoaW50ICpzMyk7CisKK2V4dGVybiBpbnQgczEsIHMyOworCitp bnQgeCh2b2lkKQoreworICBpbnQgczMgPSBzMSArIHMyOworICByZXR1cm4g eSgmczMpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt bm90ICJhbmRsXFtcXHQgXF0qXFwkLTE2LFxbXFx0IFxdKiVlc3AiIH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv aW5jb21pbmctMTUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2luY29taW5nLTE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZTZhMTc0OQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2luY29taW5nLTE1LmMKQEAgLTAsMCArMSwx NSBAQAorLyogUFIgdGFyZ2V0LzQwODM4ICovCisvKiB7IGRnLWRvIGNvbXBp bGUgeyB0YXJnZXQgeyB7ICEgKi0qLWRhcndpbiogfSAmJiBpbHAzMiB9IH0g fSAqLworLyogeyBkZy1vcHRpb25zICItdyAtbXN0YWNrcmVhbGlnbiAtTzIg LW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NCIgfSAqLworCitleHRlcm4g bG9uZyBsb25nIHkobG9uZyBsb25nICpzMyk7CisKK2V4dGVybiBsb25nIGxv bmcgczEsIHMyOworCitsb25nIGxvbmcgeCh2b2lkKQoreworICBsb25nIGxv bmcgczMgPSBzMSArIHMyOworICByZXR1cm4geSgmczMpOworfQorCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJhbmRsXFtcXHQgXF0q XFwkLTE2LFxbXFx0IFxdKiVlc3AiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctNi5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctNi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzRhYjMKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9p bmNvbWluZy02LmMKQEAgLTAsMCArMSwxNyBAQAorLyogUFIgdGFyZ2V0LzQw ODM4ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyB7ICEgKi0q LWRhcndpbiogfSAmJiBpbHAzMiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25z ICItdyAtbXN0YWNrcmVhbGlnbiAtTzIgLW1zc2UyIC1tcHJlZmVycmVkLXN0 YWNrLWJvdW5kYXJ5PTQiIH0gKi8KKwordHlwZWRlZiBpbnQgdjRzaSBfX2F0 dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDE2KSkpOworCitleHRlcm4gdjRz aSB5KHY0c2kgKnMzKTsKKworZXh0ZXJuIHY0c2kgczEsIHMyOworCit2NHNp IHgodm9pZCkKK3sKKyAgdjRzaSBzMyA9IHMxICsgczI7CisgIHJldHVybiB5 KCZzMyk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAi YW5kbFxbXFx0IFxdKlxcJC0xNixcW1xcdCBcXSolZXNwIiB9IH0gKi8KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2luY29t aW5nLTcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2luY29t aW5nLTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j ZGQ2MDM3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvaW5jb21pbmctNy5jCkBAIC0wLDAgKzEsMTYgQEAKKy8q IFBSIHRhcmdldC80MDgzOCAqLworLyogeyBkZy1kbyBjb21waWxlIHsgdGFy Z2V0IHsgeyAhICotKi1kYXJ3aW4qIH0gJiYgaWxwMzIgfSB9IH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLXcgLW1zdGFja3JlYWxpZ24gLU8yIC1tc3NlMiAt bXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00IiB9ICovCisKK3R5cGVkZWYg aW50IHY0c2kgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsK KworZXh0ZXJuIHY0c2kgeSh2NHNpLCB2NHNpLCB2NHNpLCB2NHNpLCB2NHNp KTsKKworZXh0ZXJuIHY0c2kgczEsIHMyOworCit2NHNpIHgodm9pZCkKK3sK KyAgcmV0dXJuIHkoczEsIHMyLCBzMSwgczIsIHMyKTsKK30KKworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJhbmRsXFtcXHQgXF0qXFwkLTE2 LFxbXFx0IFxdKiVlc3AiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctOC5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvaW5jb21pbmctOC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDg4MDAKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWlu Zy04LmMKQEAgLTAsMCArMSwxOCBAQAorLyogUFIgdGFyZ2V0LzQwODM4ICov CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyB7ICEgKi0qLWRhcndp biogfSAmJiBpbHAzMiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItdyAt bXN0YWNrcmVhbGlnbiAtTzMgLW1zc2UyIC1tcHJlZmVycmVkLXN0YWNrLWJv dW5kYXJ5PTQiIH0gKi8KKworZmxvYXQKK2ZvbyAoZmxvYXQgZikKK3sKKyAg ZmxvYXQgYXJyYXlbMTI4XTsKKyAgZmxvYXQgeDsKKyAgaW50IGk7CisgIGZv ciAoaSA9IDA7IGkgPCBzaXplb2YoYXJyYXkpIC8gc2l6ZW9mKCphcnJheSk7 IGkrKykKKyAgICBhcnJheVtpXSA9IGY7CisgIGZvciAoaSA9IDA7IGkgPCBz aXplb2YoYXJyYXkpIC8gc2l6ZW9mKCphcnJheSk7IGkrKykKKyAgICB4ICs9 IGFycmF5W2ldOworICByZXR1cm4geDsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJhbmRsXFtcXHQgXF0qXFwkLTE2LFxbXFx0IFxd KiVlc3AiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvaW5jb21pbmctOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvaW5jb21pbmctOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmU0M2NiZDYKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbmNvbWluZy05LmMKQEAg LTAsMCArMSwxOCBAQAorLyogUFIgdGFyZ2V0LzQwODM4ICovCisvKiB7IGRn LWRvIGNvbXBpbGUgeyB0YXJnZXQgeyB7ICEgKi0qLWRhcndpbiogfSAmJiBp bHAzMiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItdyAtbXN0YWNrcmVh bGlnbiAtTzMgLW1uby1zc2UgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9 NCIgfSAqLworCitmbG9hdAorZm9vIChmbG9hdCBmKQoreworICBmbG9hdCBh cnJheVsxMjhdOworICBmbG9hdCB4OworICBpbnQgaTsKKyAgZm9yIChpID0g MDsgaSA8IHNpemVvZihhcnJheSkgLyBzaXplb2YoKmFycmF5KTsgaSsrKQor ICAgIGFycmF5W2ldID0gZjsKKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZihh cnJheSkgLyBzaXplb2YoKmFycmF5KTsgaSsrKQorICAgIHggKz0gYXJyYXlb aV07CisgIHJldHVybiB4OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICJhbmRsXFtcXHQgXF0qXFwkLTE2LFxbXFx0IFxdKiVl c3AiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHIzNzg0My00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9wcjM3ODQzLTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi44ZTVmNTFmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIzNzg0My00LmMKQEAgLTAsMCAr MSwxMyBAQAorLyogVGVzdCBmb3Igc3RhY2sgYWxpZ25tZW50IHdpdGggc2li Y2FsbCBvcHRpbWl6YXRpb24uICAqLworLyogeyBkZy1kbyBjb21waWxlIHsg dGFyZ2V0IHsgaWxwMzIgJiYgbm9ucGljIH0gfSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1PMiAtbXNzZTIgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9 NCAtbXN0YWNrcmVhbGlnbiIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLW5vdCAiYW5kbFxbXFx0IFxdKlxcJC0xNixcW1xcdCBcXSol XFtyZVxdP3NwIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci1ub3QgImNhbGxcW1xcdCBcXSpmb28iIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJqbXBcW1xcdCBcXSpmb28iIH0gfSAq LworCitleHRlcm4gaW50IGZvbyAodm9pZCk7CisKK2ludCBiYXIgKHZvaWQp Cit7CisgICAgcmV0dXJuIGZvbygpOworfQo= --0016e6d7ec20f1246e047674d119--