From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4471 invoked by alias); 19 Aug 2009 02:17:38 -0000 Received: (qmail 4462 invoked by uid 22791); 19 Aug 2009 02:17:34 -0000 X-SWARE-Spam-Status: No, hits=0.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_21,J_CHICKENPOX_23,J_CHICKENPOX_24,J_CHICKENPOX_25,J_CHICKENPOX_41,J_CHICKENPOX_46,J_CHICKENPOX_53,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-gx0-f219.google.com (HELO mail-gx0-f219.google.com) (209.85.217.219) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 19 Aug 2009 02:17:25 +0000 Received: by gxk19 with SMTP id 19so4481901gxk.0 for ; Tue, 18 Aug 2009 19:17:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.231.16.136 with SMTP id o8mr3573171iba.24.1250648242120; Tue, 18 Aug 2009 19:17:22 -0700 (PDT) In-Reply-To: References: <128654.34357.qm@web112502.mail.gq1.yahoo.com> From: Hui Zhu Date: Wed, 19 Aug 2009 02:44:00 -0000 Message-ID: Subject: Re: final i386.floating.record.patch To: paawan oza Cc: Michael Snyder , "gdb-patches@sourceware.org" , Mark Kettenis Content-Type: multipart/mixed; boundary=000325575b2235e9170471753ca7 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-08/txt/msg00299.txt.bz2 --000325575b2235e9170471753ca7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 13801 Oops, this is not the bug in fp patch. Sorry for it. After patch http://sourceware.org/ml/gdb-patches/2009-08/msg00272.html Everything is OK. I post a new patch that remove space in the tail. I think you need write a changelog. You can get a example from src/ChangeLog. Please Let each line doesn't bigger than 72. Thanks, Hui On Wed, Aug 19, 2009 at 09:13, Hui Zhu wrote: > Could you try cvs-head? > > On Tue, Aug 18, 2009 at 21:48, paawan oza wrote: >> Hi, >> >> Another analysis and observation is: >> >> I used gdb-6.8.50.20090803 and everything seemed okay. >> Hui used gdb-6.8.50.20090817 and patch was still the same and gdb threw = these error. >> was there any thing major changed in gdb ? >> >> and gdb throws error in >> ../../src/gdb/utils.c:1200: >> >> which looks like somebody has allocated memory too much or something has= gone wrong in error checking. >> >> >> the floating-point-patch is still the same, if it works fine with gdb-6.= 8.50.20090803, it is high unlikely that why should it throw memory allocati= on error with gdb-6.8.50.20090817 (unless system is dangerously low in virt= ual memory, swap space is full). >> >> Regards, >> Oza. >> >> >> >> --- On Mon, 8/17/09, paawan oza wrote: >> >>> From: paawan oza >>> Subject: Re: final i386.floating.record.patch >>> To: "Michael Snyder" , "Hui Zhu" >>> Cc: "gdb-patches@sourceware.org" , "Mark Ke= ttenis" >>> Date: Monday, August 17, 2009, 9:40 PM >>> Hi Hui, >>> >>> I test the same and it seems working fine. Another thing I >>> observe is, vertual memory is low problem and may be gdb's >>> virtual address space gets exhausted or any other limit! >>> highly unlikely though. >>> >>> please see the atached log. >>> >>> linux-p94d:/home/oza/mk_patch/take_diff/gdb_current/gdb-6.8.50.20090803= /gdb >>> # ./gdb ./test_floats >>> GNU gdb (GDB) 6.8.50.20090803 >>> Copyright (C) 2009 Free Software Foundation, Inc. >>> License GPLv3+: GNU GPL version 3 or later >>> This is free software: you are free to change and >>> redistribute it. >>> There is NO WARRANTY, to the extent permitted by law. >>> Type "show copying" >>> and "show warranty" for details. >>> This GDB was configured as "i686-pc-linux-gnu". >>> For bug reporting instructions, please see: >>> ... >>> Setting up the environment for debugging gdb. >>> Function "internal_error" not defined. >>> Make breakpoint pending on future shared library load? (y >>> or [n]) [answered N; input not from terminal] >>> Function "info_command" not defined. >>> Make breakpoint pending on future shared library load? (y >>> or [n]) [answered N; input not from terminal] >>> /home/oza/mk_patch/take_diff/gdb_current/gdb-6.8.50.20090803/gdb/.gdbin= it:8: >>> Error in sourced command file: >>> No breakpoint number 0. >>> (gdb) start >>> Temporary breakpoint 1 at 0x8048c94: file ./test_floats.c, >>> line 196. >>> Starting program: >>> /home/oza/mk_patch/take_diff/gdb_current/gdb-6.8.50.20090803/gdb/test_f= loats >>> >>> Temporary breakpoint 1, main () at ./test_floats.c:196 >>> 196=A0 =A0 =A0 =A0=A0=A0init_floats(); >>> (gdb) record >>> (gdb) c >>> Continuing. >>> result is 369.438751 >>> result is 10.320001 >>> result is 23.008301 >>> result is 0.000000 >>> result is 10.450000 >>> result is 10.776012 >>> result is 495830.968750 >>> result is -181.778748 >>> result is 12.525923 >>> result is 2.195619 >>> result is 5.055601 >>> result is inf >>> result is inf >>> result is -0.988032 >>> result is 0.154251 >>> result is -6.405331 >>> result is 1.537475 >>> The next instruction is syscall exit_group.=A0 It will >>> make the program exit.=A0 Do you want to stop the >>> program?([y] or n) y >>> Process record: inferior program stopped. >>> >>> Program received signal SIGTRAP, Trace/breakpoint trap. >>> 0xffffe405 in __kernel_vsyscall () >>> (gdb) >>> >>> Regards, >>> Oza. >>> >>> >>> >>> >>> --- On Mon, 8/17/09, Hui Zhu >>> wrote: >>> >>> > From: Hui Zhu >>> > Subject: Re: final i386.floating.record.patch >>> > To: "Michael Snyder" >>> > Cc: "paawan oza" , >>> "gdb-patches@sourceware.org" >>> , >>> "Mark Kettenis" >>> > Date: Monday, August 17, 2009, 12:06 PM >>> > Get some error with this patch. >>> > cat fp.c >>> > #include >>> > #include >>> > #include >>> > >>> > /* the test intends to test following insns. >>> > flds faddp fstps fstpl fldl fxch fabs fdivrp fmulp >>> fsubrp >>> > fucomp fnstsw fsqrt >>> > fchs f2xm1 fyl2x fxtract fprem1 fld fdecstp fld1 >>> fldl2t >>> > fldl2e FLDPI >>> > FLDLG2 FLDLN2 >>> > FLDZ fincstp ffree fptan fpatan fincstp fsincos >>> frndint >>> > fscale fsin fcos fcmovb >>> > fcmovbe fcmove fcmovu fcmovnb fcmovnbe fsave frstor >>> fstsw >>> > */ >>> > >>> > float no1,no2,no3,no4,no5,no6,no7; >>> > double x =3D 100.345, y =3D 25.7789; >>> > long double ldx =3D 88888888888888888888.88, ldy =3D >>> > 9999999999999999999.99; >>> > float result,resultd,resultld; >>> > float *float_memory; >>> > >>> > /* initialization of floats */ >>> > void init_floats() >>> > { >>> >=A0 no1 =3D 10.45; >>> >=A0 no2 =3D 20.77; >>> >=A0 no3 =3D 156.89874646; >>> >=A0 no4 =3D 14.56; >>> >=A0 no5 =3D 11.11; >>> >=A0 no6 =3D 66.77; >>> >=A0 no7 =3D 88.88; >>> >=A0 float_memory =3D malloc(sizeof(float) * 4); >>> >=A0 *float_memory =3D 256.256; >>> >=A0 *(float_memory + 1) =3D 356.356; >>> >=A0 *(float_memory + 2) =3D 456.456; >>> >=A0 *(float_memory + 3) =3D 556.556; >>> > } >>> > >>> > /* marks FPU stack as empty */ >>> > void empty_fpu_stack() >>> > { >>> >=A0 asm ("ffree %st(1) \n\t" >>> > =A0 =A0 =A0 "ffree %st(2) \n\t" >>> > =A0 =A0 =A0 "ffree %st(3) \n\t" >>> > =A0 =A0 =A0 "ffree %st(4) \n\t" >>> > =A0 =A0 =A0 "ffree %st(5) \n\t" >>> > =A0 =A0 =A0 "ffree %st(6) \n\t" >>> > =A0 =A0 =A0 "ffree %st(7)"); >>> > } >>> > >>> > /* tests floating point arithmatic */ >>> > void test_arith_floats() >>> > { >>> >=A0 result =3D no1 + no2 + no3 + no4 + no5 + no6 + >>> no7; >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D fmodf(no2,no1); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 resultd =3D fmod(x,y); >>> >=A0 printf("result is %f\n",resultd); >>> > >>> >=A0 resultld =3D fmodl(ldy,ldy); >>> >=A0 printf("result is %f\n",resultld); >>> > >>> >=A0 result =3D fabsf(no1); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D no3 / no4; >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D no1 * no2 * no3 * no4; >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D no1 - no2 - no3 - no4; >>> >=A0 printf("result is %f\n",result); >>> > >>> > >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("fchs"); >>> > >>> >=A0 /* test for f2xm1 */ >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("f2xm1"); >>> > >>> >=A0 asm ("fyl2x"); >>> > >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("fxtract"); >>> > >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("fprem1"); >>> > >>> >=A0 /* decrement fpu stack pointer only status >>> register should >>> > get affected */ >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> > >>> >=A0 empty_fpu_stack(); >>> > >>> >=A0 asm ("fld1"); >>> >=A0 asm ("fldl2t"); >>> >=A0 asm ("fldl2e"); >>> >=A0 asm ("fldpi"); >>> >=A0 asm ("fldlg2"); >>> >=A0 asm ("fldln2"); >>> >=A0 asm ("fldz"); >>> > >>> >=A0 empty_fpu_stack(); >>> >=A0 /* finishing emptying the stack */ >>> > >>> >=A0 result =3D sqrt(no3); >>> >=A0 printf("result is %f\n",result); >>> > } >>> > >>> > void test_log_exp_floats() >>> > { >>> >=A0 result =3D log10(no3); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D log(no3); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D exp10(no3); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D exp(no3); >>> >=A0 printf("result is %f\n",result); >>> > } >>> > >>> > void test_trigo_floats() >>> > { >>> >=A0 result =3D sin(30); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D cos(30); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D tan(30); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 result =3D atan(30); >>> >=A0 printf("result is %f\n",result); >>> > >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("fptan"); >>> > >>> >=A0 /* changes st1 and popping register stack */ >>> >=A0 asm ("fpatan"); >>> > >>> >=A0 asm("fincstp"); >>> >=A0 asm ("fld %0" : :"m"(float_memory)); >>> >=A0 asm ("fsincos"); >>> > >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("frndint"); >>> > >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("fld %0" : :"m"(*(float_memory+1))); >>> >=A0 asm ("fscale"); >>> > >>> >=A0 empty_fpu_stack(); >>> > >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("fsin"); >>> >=A0 asm ("fcos"); >>> > >>> >=A0 /* currently we assume condition likely and >>> always record >>> > the registers >>> >=A0 code could be optimized only if the flag is set >>> then >>> > record */ >>> >=A0 asm ("fld %0" : :"m"(*float_memory)); >>> >=A0 asm ("fld %0" : :"m"(*(float_memory+1))); >>> >=A0 asm ("fcmovb %st(1), %st"); >>> >=A0 asm ("fcmovbe %st(1), %st"); >>> >=A0 asm ("fcmove %st(1), %st"); >>> >=A0 asm ("fcmovu %st(1), %st"); >>> >=A0 asm ("fcmovnb %st(1), %st"); >>> >=A0 asm ("fcmovnbe %st(1), %st"); >>> > >>> >=A0 empty_fpu_stack(); >>> >=A0 /* finished emtyping the stack */ >>> > } >>> > >>> > void test_compare_floats() >>> > { >>> > =A0=A0=A0ldy =3D 88888888888888888888.88; >>> > =A0=A0=A0if (ldx =3D=3D ldy) >>> > =A0 =A0=A0=A0ldy =3D >>> > 7777777777777777777777777777.777; >>> > =A0=A0=A0else >>> > =A0 =A0=A0=A0ldy =3D >>> > 666666666666666666666666666.666; >>> > } >>> > >>> > /* test loading and saving of FPU environment */ >>> > void test_fpu_env() >>> > { >>> >=A0 asm ("fsave %0" : "=3Dm"(*float_memory) : ); >>> >=A0 asm ("frstor %0" : : "m"(*float_memory)); >>> >=A0 asm ("fstsw %ax"); >>> > } >>> > >>> > int main() >>> > { >>> > =A0=A0=A0init_floats(); >>> > =A0=A0=A0test_arith_floats(); >>> > =A0=A0=A0test_log_exp_floats(); >>> > =A0=A0=A0test_trigo_floats(); >>> > =A0=A0=A0test_compare_floats(); >>> > =A0=A0=A0test_fpu_env(); >>> > } >>> > >>> > >>> > >>> > ./gdb ./a.out >>> > GNU gdb (GDB) 6.8.50.20090817-cvs >>> > Copyright (C) 2009 Free Software Foundation, Inc. >>> > License GPLv3+: GNU GPL version 3 or later >>> > This is free software: you are free to change and >>> > redistribute it. >>> > There is NO WARRANTY, to the extent permitted by >>> law. >>> > Type "show copying" >>> > and "show warranty" for details. >>> > This GDB was configured as "i686-pc-linux-gnu". >>> > For bug reporting instructions, please see: >>> > ... >>> > Setting up the environment for debugging gdb. >>> > Function "internal_error" not defined. >>> > Make breakpoint pending on future shared library load? >>> (y >>> > or [n]) >>> > [answered N; input not from terminal] >>> > Function "info_command" not defined. >>> > Make breakpoint pending on future shared library load? >>> (y >>> > or [n]) >>> > [answered N; input not from terminal] >>> > /home/teawater/gdb/bgdbno/gdb/.gdbinit:8: Error in >>> sourced >>> > command file: >>> > No breakpoint number 0. >>> > (gdb) start >>> > During symbol reading, DW_AT_name missing from >>> > DW_TAG_base_type. >>> > Temporary breakpoint 1 at 0x8048c74: file fp.c, line >>> 196. >>> > Starting program: /home/teawater/gdb/bgdbno/gdb/a.out >>> > >>> > Temporary breakpoint 1, main () at fp.c:196 >>> > 196=A0=A0=A0 =A0=A0=A0init_floats(); >>> > (gdb) record >>> > (gdb) c >>> > Continuing. >>> > ../../src/gdb/utils.c:1200: internal-error: virtual >>> memory >>> > exhausted. >>> > A problem internal to GDB has been detected, >>> > further debugging may prove unreliable. >>> > Quit this debugging session? (y or n) n >>> > ../../src/gdb/utils.c:1200: internal-error: virtual >>> memory >>> > exhausted. >>> > A problem internal to GDB has been detected, >>> > further debugging may prove unreliable. >>> > Create a core file of GDB? (y or n) n >>> > >>> > Program received signal SIGTRAP, Trace/breakpoint >>> trap. >>> > 0xb7eba9bc in memcpy () from >>> /lib/tls/i686/cmov/libc.so.6 >>> > (gdb) quit >>> > A debugging session is active. >>> > >>> > =A0=A0=A0 Inferior 1 [process 15657] will be >>> > killed. >>> > >>> > Quit anyway? (y or n) y >>> > >>> > >>> > Thanks, >>> > Hui >>> > >>> > On Mon, Aug 17, 2009 at 05:16, Michael Snyder >>> > wrote: >>> > > paawan oza wrote: >>> > >> >>> > >> Hi Hui & Michael, >>> > >> Now we revert status registers also. >>> > >> please find the patch attached. >>> > >> I am sorry, if I am not pasting the patch in >>> > email-body due to tabs&spaces >>> > >> problem faced by Michael last time. >>> > >> Regards, >>> > >> Oza. >>> > > >>> > > Looking good! >>> > > >>> > > There were some conflicts between your changes >>> and a >>> > check-in that >>> > > happened after your submission =A0-- =A0I've taken >>> the >>> > liberty of merging >>> > > your changes with the cvs head, fixing up the >>> > conflicts. =A0Hope you >>> > > don't mind =A0-- =A0merged patch attached. >>> > > >>> > > I'll review your tests next. >>> > > >>> > > Can you write up a change log entry for this >>> patch? >>> > > >>> > > Hui, Mark, any more comments? >>> > > >>> > > Cheers, >>> > > Michael >>> > > >>> > > >>> > > >>> > > >>> > > >>> > >>> >>> >>> >>> >> >> >> >> > --000325575b2235e9170471753ca7 Content-Type: text/x-diff; charset=US-ASCII; name="merged.patch" Content-Disposition: attachment; filename="merged.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fyjfsp9j0 Content-length: 19472 LS0tCiBpMzg2LXRkZXAuYyB8ICAzODkgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCiAxIGZp bGUgY2hhbmdlZCwgMzY5IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygt KQoKLS0tIGEvaTM4Ni10ZGVwLmMKKysrIGIvaTM4Ni10ZGVwLmMKQEAgLTMx OTYsNiArMzE5Niw3NCBAQCBpMzg2X3JlY29yZF9wdXNoIChzdHJ1Y3QgaTM4 Nl9yZWNvcmRfcyAqCiAgIHJldHVybiAwOwogfQogCisKKy8qIERlZmluZXMg Y29udGVudHMgdG8gcmVjb3JkLiAgKi8KKyNkZWZpbmUgSTM4Nl9TQVZFX0ZQ VV9SRUdTICAgICAgICAgICAgICAweGZmZmQKKyNkZWZpbmUgSTM4Nl9TQVZF X0ZQVV9FTlYgICAgICAgICAgICAgICAweGZmZmUKKyNkZWZpbmUgSTM4Nl9T QVZFX0ZQVV9FTlZfUkVHX1NUQUNLICAgICAweGZmZmYKKworLyogUmVjb3Jk IHRoZSB2YWx1ZSBvZiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgd2hpY2gg d2lsbCBiZSBjaGFuZ2VkIGJ5IHRoZQorICAgY3VycmVudCBpbnN0cnVjdGlv biB0byAicmVjb3JkX2FyY2hfbGlzdCIuICBSZXR1cm4gLTEgaWYgc29tZXRo aW5nIGlzIHdyb25nLgorKi8KKworc3RhdGljIGludCBpMzg2X3JlY29yZF9m bG9hdHMgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpMzg2X3JlY29yZF9zICppciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpcmVn bnVtKQoreworICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJj aF90ZGVwIChnZGJhcmNoKTsKKyAgaW50IGk7CisKKyAgLyogT3phOiBCZWNh dXNlIG9mIGZsb2F0aW5nIHBvaW50IGluc24gcHVzaC9wb3Agb2YgZnB1IHN0 YWNrIGlzIGdvaW5nIHRvCisgICAgIGhhcHBlbi4gIEN1cnJlbnRseSB3ZSBz dG9yZSBzdDAtc3Q3IHJlZ2lzdGVycywgYnV0IHdlIG5lZWQgbm90IHN0b3Jl IGFsbAorICAgICByZWdpc3RlcnMgYWxsIHRoZSB0aW1lLCBpbiBmdXR1cmUg d2UgdXNlIGZ0YWcgcmVnaXN0ZXIgYW5kIHJlY29yZCBvbmx5CisgICAgIHRo b3NlIHdobyBhcmUgbm90IG1hcmtlZCBhcyBhbiBlbXB0eS4gICovCisKKyAg aWYgKEkzODZfU0FWRV9GUFVfUkVHUyA9PSBpcmVnbnVtKQorICAgIHsKKyAg ICAgIGZvciAoaSA9IEkzODdfU1QwX1JFR05VTSAodGRlcCk7IGkgPD0gSTM4 N19TVDBfUkVHTlVNICh0ZGVwKSArIDc7IGkrKykKKyAgICAgICAgeworICAg ICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKGlyLT5yZWdj YWNoZSwgaSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K KyAgICB9CisgIGVsc2UgaWYgKEkzODZfU0FWRV9GUFVfRU5WID09IGlyZWdu dW0pCisgICAgeworICAgICAgZm9yIChpID0gSTM4N19GQ1RSTF9SRUdOVU0g KHRkZXApOyBpIDw9IEkzODdfRk9QX1JFR05VTSAodGRlcCk7IGkrKykKKwkg ICAgICB7CisJICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAo aXItPnJlZ2NhY2hlLCBpKSkKKwkgICAgICAgIHJldHVybiAtMTsKKwkgICAg ICB9CisgICAgfQorICBlbHNlIGlmIChJMzg2X1NBVkVfRlBVX0VOVl9SRUdf U1RBQ0sgPT0gaXJlZ251bSkKKyAgICB7CisgICAgICBmb3IgKGkgPSBJMzg3 X1NUMF9SRUdOVU0gKHRkZXApOyBpIDw9IEkzODdfRk9QX1JFR05VTSAodGRl cCk7IGkrKykKKyAgICAgIHsKKyAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX3JlZyAoaXItPnJlZ2NhY2hlLCBpKSkKKyAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICB9CisgICAgfQorICBlbHNlIGlmICgoaXJlZ251bSA+ PSBJMzg3X1NUMF9SRUdOVU0gKHRkZXApKSAmJgorICAgICAgICAgICAoaXJl Z251bSA8PSBJMzg3X0ZPUF9SRUdOVU0gKHRkZXApKSkKKyAgICB7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChpci0+cmVnY2FjaGUs aXJlZ251bSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICAvKiBQYXJhbWV0ZXIgZXJyb3IuICAqLworICAgICAg cmV0dXJuIC0xOworICAgIH0KKyAgaWYoSTM4Nl9TQVZFX0ZQVV9FTlYgIT0g aXJlZ251bSkKKyAgICB7CisgICAgZm9yIChpID0gSTM4N19GQ1RSTF9SRUdO VU0gKHRkZXApOyBpIDw9IEkzODdfRk9QX1JFR05VTSAodGRlcCk7IGkrKykK KyAgICAgIHsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KGlyLT5yZWdjYWNoZSwgaSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAg IH0KKyAgICB9CisgIHJldHVybiAwOworfQorCiAvKiBQYXJzZSB0aGUgY3Vy cmVudCBpbnN0cnVjdGlvbiBhbmQgcmVjb3JkIHRoZSB2YWx1ZXMgb2YgdGhl IHJlZ2lzdGVycyBhbmQKICAgIG1lbW9yeSB0aGF0IHdpbGwgYmUgY2hhbmdl ZCBpbiBjdXJyZW50IGluc3RydWN0aW9uIHRvICJyZWNvcmRfYXJjaF9saXN0 Ii4KICAgIFJldHVybiAtMSBpZiBzb21ldGhpbmcgd3JvbmcuICovCkBAIC0z MjE0LDYgKzMyODIsNyBAQCBpMzg2X3Byb2Nlc3NfcmVjb3JkIChzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiCiAgIFVMT05HRVNUIHRtcHVsb25nZXN0OwogICB1aW50 MzJfdCBvcGNvZGU7CiAgIHN0cnVjdCBpMzg2X3JlY29yZF9zIGlyOworICBz dHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJh cmNoKTsKICAgaW50IHJleCA9IDA7CiAgIHVpbnQ4X3QgcmV4X3cgPSAtMTsK ICAgdWludDhfdCByZXhfciA9IDA7CkBAIC00MjYwLDggKzQzMjksNyBAQCBy ZXN3aXRjaDoKIAl9CiAgICAgICBicmVhazsKIAotICAgICAgLyogZmxvYXRz ICovCi0gICAgICAvKiBJdCBqdXN0IHJlY29yZCB0aGUgbWVtb3J5IGNoYW5n ZSBvZiBpbnN0cmN1dGlvbi4gKi8KKyAgICAvKiBGbG9hdHMuICAqLwogICAg IGNhc2UgMHhkODoKICAgICBjYXNlIDB4ZDk6CiAgICAgY2FzZSAweGRhOgpA QCAtNDI3NSw0NSArNDM0Myw1NiBAQCByZXN3aXRjaDoKICAgICAgIGlyLnJl ZyB8PSAoKG9wY29kZSAmIDcpIDw8IDMpOwogICAgICAgaWYgKGlyLm1vZCAh PSAzKQogCXsKLQkgIC8qIG1lbW9yeSAqLworCSAgLyogTWVtb3J5LiAqLwog CSAgdWludDY0X3QgdG1wdTY0OwogCiAJICBpZiAoaTM4Nl9yZWNvcmRfbGVh X21vZHJtX2FkZHIgKCZpciwgJnRtcHU2NCkpCiAJICAgIHJldHVybiAtMTsK IAkgIHN3aXRjaCAoaXIucmVnKQogCSAgICB7Ci0JICAgIGNhc2UgMHgwMDoK LQkgICAgY2FzZSAweDAxOgogCSAgICBjYXNlIDB4MDI6CisgICAgICAgICAg ICBjYXNlIDB4MTI6CisgICAgICAgICAgICBjYXNlIDB4MjI6CisgICAgICAg ICAgICBjYXNlIDB4MzI6CisJICAgICAgLyogRm9yIGZjb20sIGZpY29tIG5v dGhpbmcgdG8gZG8uICAqLworICAgICAgICAgICAgICBicmVhazsKIAkgICAg Y2FzZSAweDAzOgorICAgICAgICAgICAgY2FzZSAweDEzOgorICAgICAgICAg ICAgY2FzZSAweDIzOgorICAgICAgICAgICAgY2FzZSAweDMzOgorCSAgICAg IC8qIEZvciBmY29tcCwgZmljb21wIHBvcCBGUFUgc3RhY2ssIHN0b3JlIGFs bC4gICovCisgICAgICAgICAgICAgIGlmIChpMzg2X3JlY29yZF9mbG9hdHMg KGdkYmFyY2gsICZpciwgSTM4Nl9TQVZFX0ZQVV9SRUdTKSkKKyAgICAgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgY2FzZSAweDAwOgorICAgICAgICAgICAgY2FzZSAweDAxOgog CSAgICBjYXNlIDB4MDQ6CiAJICAgIGNhc2UgMHgwNToKIAkgICAgY2FzZSAw eDA2OgogCSAgICBjYXNlIDB4MDc6CiAJICAgIGNhc2UgMHgxMDoKIAkgICAg Y2FzZSAweDExOgotCSAgICBjYXNlIDB4MTI6Ci0JICAgIGNhc2UgMHgxMzoK IAkgICAgY2FzZSAweDE0OgogCSAgICBjYXNlIDB4MTU6CiAJICAgIGNhc2Ug MHgxNjoKIAkgICAgY2FzZSAweDE3OgogCSAgICBjYXNlIDB4MjA6CiAJICAg IGNhc2UgMHgyMToKLQkgICAgY2FzZSAweDIyOgotCSAgICBjYXNlIDB4MjM6 CiAJICAgIGNhc2UgMHgyNDoKIAkgICAgY2FzZSAweDI1OgogCSAgICBjYXNl IDB4MjY6CiAJICAgIGNhc2UgMHgyNzoKIAkgICAgY2FzZSAweDMwOgogCSAg ICBjYXNlIDB4MzE6Ci0JICAgIGNhc2UgMHgzMjoKLQkgICAgY2FzZSAweDMz OgogCSAgICBjYXNlIDB4MzQ6CiAJICAgIGNhc2UgMHgzNToKIAkgICAgY2Fz ZSAweDM2OgogCSAgICBjYXNlIDB4Mzc6CisgICAgICAgICAgICAgIC8qIEZv ciBmYWRkLCBmbXVsLCBmc3ViLCBmc3ViciwgZmRpdiwgZmRpdnIsIGZpYWRk LCBmaW11bCwKKyAgICAgICAgICAgICAgICAgZmlzdWIsIGZpc3ViciwgZmlk aXYsIGZpZGl2ciwgbW9kUi9NLnJlZyBpcyBhbiBleHRlbnNpb24KKyAgICAg ICAgICAgICAgICAgb2YgY29kZSwgIGFsd2F5cyBhZmZlY3RzIHN0KDApIHJl Z2lzdGVyLiAgKi8KKyAgICAgICAgICAgICAgaWYgKGkzODZfcmVjb3JkX2Zs b2F0cyAoZ2RiYXJjaCwgJmlyLCBJMzg3X1NUMF9SRUdOVU0gKHRkZXApKSkK KyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAJICAgICAgYnJlYWs7CiAJ ICAgIGNhc2UgMHgwODoKIAkgICAgY2FzZSAweDBhOgpAQCAtNDMyMiw2ICs0 NDAxLDcgQEAgcmVzd2l0Y2g6CiAJICAgIGNhc2UgMHgxOToKIAkgICAgY2Fz ZSAweDFhOgogCSAgICBjYXNlIDB4MWI6CisgICAgICAgICAgICBjYXNlIDB4 MWQ6CiAJICAgIGNhc2UgMHgyODoKIAkgICAgY2FzZSAweDI5OgogCSAgICBj YXNlIDB4MmE6CkBAIC00MzMwLDkgKzQ0MTAsMTQgQEAgcmVzd2l0Y2g6CiAJ ICAgIGNhc2UgMHgzOToKIAkgICAgY2FzZSAweDNhOgogCSAgICBjYXNlIDB4 M2I6CisgICAgICAgICAgICBjYXNlIDB4M2M6CisgICAgICAgICAgICBjYXNl IDB4M2Q6CiAJICAgICAgc3dpdGNoIChpci5yZWcgJiA3KQogCQl7CiAJCWNh c2UgMDoKKwkJICAvKiBIYW5kbGluZyBmbGQsIGZpbGQuICAqLworCQkgIGlm IChpMzg2X3JlY29yZF9mbG9hdHMgKGdkYmFyY2gsICZpciwgSTM4Nl9TQVZF X0ZQVV9SRUdTKSkKKwkJICAgIHJldHVybiAtMTsKIAkJICBicmVhazsKIAkJ Y2FzZSAxOgogCQkgIHN3aXRjaCAoaXIucmVnID4+IDQpCkBAIC00MzQ2LDYg KzQ0MzEsNyBAQCByZXN3aXRjaDoKIAkJCXJldHVybiAtMTsKIAkJICAgICAg YnJlYWs7CiAJCSAgICBjYXNlIDM6CisJCSAgICAgIGJyZWFrOwogCQkgICAg ZGVmYXVsdDoKIAkJICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTY0LCAyKSkKIAkJCXJldHVybiAtMTsKQEAgLTQzNTYsMTUgKzQ0 NDIsNDkgQEAgcmVzd2l0Y2g6CiAJCSAgc3dpdGNoIChpci5yZWcgPj4gNCkK IAkJICAgIHsKIAkJICAgIGNhc2UgMDoKKwkJICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTY0LCA0KSkKKwkJCXJldHVybiAtMTsK KwkJICAgICAgaWYgKDMgPT0gKGlyLnJlZyAmIDcpKQorCQkJeworCQkJICAv KiBGb3IgZnN0cCBtMzJmcC4gICovCisJCQkgIGlmIChpMzg2X3JlY29yZF9m bG9hdHMgKGdkYmFyY2gsICZpciwKKwkJCQkJCSAgSTM4Nl9TQVZFX0ZQVV9S RUdTKSkKKwkJCSAgICByZXR1cm4gLTE7CisJCQl9CisJCSAgICAgIGJyZWFr OwogCQkgICAgY2FzZSAxOgogCQkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1NjQsIDQpKQogCQkJcmV0dXJuIC0xOworCQkgICAg ICBpZiAoKDMgPT0gKGlyLnJlZyAmIDcpKQorCQkJICB8fCAoNSA9PSAoaXIu cmVnICYgNykpCisJCQkgIHx8ICg3ID09IChpci5yZWcgJiA3KSkpCisJCQl7 CisJCQkgIC8qIEZvciBmc3RwIGluc24uICAqLworCQkJICBpZiAoaTM4Nl9y ZWNvcmRfZmxvYXRzIChnZGJhcmNoLCAmaXIsCisJCQkJCQkgIEkzODZfU0FW RV9GUFVfUkVHUykpCisJCQkgICAgcmV0dXJuIC0xOworCQkJfQogCQkgICAg ICBicmVhazsKIAkJICAgIGNhc2UgMjoKIAkJICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTY0LCA4KSkKIAkJCXJldHVybiAtMTsK KwkJICAgICAgaWYgKDMgPT0gKGlyLnJlZyAmIDcpKQorCQkJeworCQkJICAv KiBGb3IgZnN0cCBtNjRmcC4gICovCisJCQkgIGlmIChpMzg2X3JlY29yZF9m bG9hdHMgKGdkYmFyY2gsICZpciwKKwkJCQkJCSAgSTM4Nl9TQVZFX0ZQVV9S RUdTKSkKKwkJCSAgICByZXR1cm4gLTE7CisJCQl9CiAJCSAgICAgIGJyZWFr OwogCQkgICAgY2FzZSAzOgorCQkgICAgICBpZiAoKDMgPD0gKGlyLnJlZyAm IDcpKSAmJiAoNiA8PSAoaXIucmVnICYgNykpKQorCQkJeworCQkJICAvKiBG b3IgZmlzdHAsIGZibGQsIGZpbGQsIGZic3RwLiAgKi8KKwkJCSAgaWYgKGkz ODZfcmVjb3JkX2Zsb2F0cyAoZ2RiYXJjaCwgJmlyLAorCQkJCQkJICBJMzg2 X1NBVkVfRlBVX1JFR1MpKQorCQkJICAgIHJldHVybiAtMTsKKwkJCX0KKwkJ ICAgICAgLyogRmFsbCB0aHJvdWdoICovCiAJCSAgICBkZWZhdWx0OgogCQkg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1NjQsIDIp KQogCQkJcmV0dXJuIC0xOwpAQCAtNDM3NCwxMSArNDQ5NCwyMSBAQCByZXN3 aXRjaDoKIAkJfQogCSAgICAgIGJyZWFrOwogCSAgICBjYXNlIDB4MGM6Cisg ICAgICAgICAgICAgIC8qIEluc24gZmxkZW52LiAgKi8KKyAgICAgICAgICAg ICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2RiYXJjaCwgJmlyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMzg2X1NBVkVf RlBVX0VOVl9SRUdfU1RBQ0spKQorICAgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgICAgYnJlYWs7CiAJICAgIGNhc2UgMHgwZDoKLQkg ICAgY2FzZSAweDFkOgorICAgICAgICAgICAgICAvKiBJbnNuIGZsZGN3LiAg Ki8KKyAgICAgICAgICAgICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2Ri YXJjaCwgJmlyLCBJMzg3X0ZDVFJMX1JFR05VTSAodGRlcCkpKQorICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgYnJlYWs7CiAJ ICAgIGNhc2UgMHgyYzoKLQkgICAgY2FzZSAweDNjOgotCSAgICBjYXNlIDB4 M2Q6CisgICAgICAgICAgICAgIC8qIEluc24gZnJzdG9yLiAgKi8KKyAgICAg ICAgICAgICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2RiYXJjaCwgJmly LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMzg2 X1NBVkVfRlBVX0VOVl9SRUdfU1RBQ0spKQorICAgICAgICAgICAgICAgIHJl dHVybiAtMTsKIAkgICAgICBicmVhazsKIAkgICAgY2FzZSAweDBlOgogCSAg ICAgIGlmIChpci5kZmxhZykKQEAgLTQzOTYsNiArNDUyNiw5IEBAIHJlc3dp dGNoOgogCSAgICBjYXNlIDB4MmY6CiAJICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTY0LCAyKSkKIAkJcmV0dXJuIC0xOworICAg ICAgICAgICAgICAvKiBJbnNuIGZzdHAsIGZic3RwLiAgKi8KKyAgICAgICAg ICAgICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2RiYXJjaCwgJmlyLCBJ Mzg2X1NBVkVfRlBVX1JFR1MpKQorICAgICAgICAgICAgICAgIHJldHVybiAt MTsKIAkgICAgICBicmVhazsKIAkgICAgY2FzZSAweDFmOgogCSAgICBjYXNl IDB4M2U6CkBAIC00NDE3LDEwICs0NTUwLDE3IEBAIHJlc3dpdGNoOgogCQl9 CiAJICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTY0 LCA4MCkpCiAJCXJldHVybiAtMTsKKwkgICAgICAvKiBJbnNuIGZzYXZlLiAg Ki8KKwkgICAgICBpZiAoaTM4Nl9yZWNvcmRfZmxvYXRzIChnZGJhcmNoLCAm aXIsCisJCQkJICAgICAgSTM4Nl9TQVZFX0ZQVV9FTlZfUkVHX1NUQUNLKSkK KwkJcmV0dXJuIC0xOwogCSAgICAgIGJyZWFrOwogCSAgICBjYXNlIDB4M2Y6 CiAJICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTY0 LCA4KSkKIAkJcmV0dXJuIC0xOworCSAgICAgIC8qIEluc24gZmlzdHAuICAq LworCSAgICAgIGlmIChpMzg2X3JlY29yZF9mbG9hdHMgKGdkYmFyY2gsICZp ciwgSTM4Nl9TQVZFX0ZQVV9SRUdTKSkKKwkJcmV0dXJuIC0xOwogCSAgICAg IGJyZWFrOwogCSAgICBkZWZhdWx0OgogCSAgICAgIGlyLmFkZHIgLT0gMjsK QEAgLTQ0MjksOCArNDU2OSwyMTEgQEAgcmVzd2l0Y2g6CiAJICAgICAgYnJl YWs7CiAJICAgIH0KIAl9CisgICAgICAvKiBPcGNvZGUgaXMgYW4gZXh0ZW5z aW9uIG9mIG1vZFIvTSBieXRlLiAgKi8KKyAgICAgIGVsc2UKKyAgICAgICAg eworCSAgc3dpdGNoIChvcGNvZGUpCisJICAgIHsKKwkgICAgY2FzZSAweGQ4 OgorCSAgICAgIGlmIChpMzg2X3JlY29yZF9mbG9hdHMgKGdkYmFyY2gsICZp ciwgSTM4N19TVDBfUkVHTlVNICh0ZGVwKSkpCisJCXJldHVybiAtMTsKKwkg ICAgICBicmVhazsKKwkgICAgY2FzZSAweGQ5OgorCSAgICAgIGlmICgweDBj ID09IChpci5tb2RybSA+PiA0KSkKKwkJeworCQkgIGlmICgoaXIubW9kcm0g JiAweDBmKSA8PSA3KQorCQkgICAgeworCQkgICAgICBpZiAoaTM4Nl9yZWNv cmRfZmxvYXRzIChnZGJhcmNoLCAmaXIsCisJCQkJCSAgICAgIEkzODZfU0FW RV9GUFVfUkVHUykpCisJCQlyZXR1cm4gLTE7CisJCSAgICB9CisgICAgICAg ICAgICAgICAgICBlbHNlCisJCSAgICB7CisJCSAgICAgIGlmIChpMzg2X3Jl Y29yZF9mbG9hdHMgKGdkYmFyY2gsICZpciwKKwkJCQkJICAgICAgSTM4N19T VDBfUkVHTlVNICh0ZGVwKSkpCisJCQlyZXR1cm4gLTE7CisJCSAgICAgIC8q IElmIG9ubHkgc3QoMCkgaXMgY2hhbmdpbmcsIHRoZW4gd2UgaGF2ZSBhbHJl YWR5CisJCQkgcmVjb3JkZWQuICAqLworCQkgICAgICBpZiAoKGlyLm1vZHJt ICYgMHgwZikgLSAweDA4KQorCQkJeworCQkJICBpZiAoaTM4Nl9yZWNvcmRf ZmxvYXRzIChnZGJhcmNoLCAmaXIsCisJCQkJCQkgIEkzODdfU1QwX1JFR05V TSAodGRlcCkgKworCQkJCQkJICAoKGlyLm1vZHJtICYgMHgwZikgLSAweDA4 KSkpCisJCQkgICAgcmV0dXJuIC0xOworCQkJfQorCQkgICAgfQorCQl9Cisg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisJCSAgc3dp dGNoIChpci5tb2RybSkKKwkJICAgIHsKKwkJICAgIGNhc2UgMHhlMDoKKwkJ ICAgIGNhc2UgMHhlMToKKwkJICAgIGNhc2UgMHhmMDoKKwkJICAgIGNhc2Ug MHhmNToKKwkJICAgIGNhc2UgMHhmODoKKwkJICAgIGNhc2UgMHhmYToKKwkJ ICAgIGNhc2UgMHhmYzoKKwkJICAgIGNhc2UgMHhmZToKKwkJICAgIGNhc2Ug MHhmZjoKKwkJICAgICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2RiYXJj aCwgJmlyLAorCQkJCQkgICAgICBJMzg3X1NUMF9SRUdOVU0gKHRkZXApKSkK KwkJCXJldHVybiAtMTsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlIDB4 ZjE6CisJCSAgICBjYXNlIDB4ZjI6CisJCSAgICBjYXNlIDB4ZjM6CisJCSAg ICBjYXNlIDB4ZjQ6CisJCSAgICBjYXNlIDB4ZjY6CisJCSAgICBjYXNlIDB4 Zjc6CisJCSAgICBjYXNlIDB4ZTg6CisJCSAgICBjYXNlIDB4ZTk6CisJCSAg ICBjYXNlIDB4ZWE6CisJCSAgICBjYXNlIDB4ZWI6CisJCSAgICBjYXNlIDB4 ZWM6CisJCSAgICBjYXNlIDB4ZWQ6CisJCSAgICBjYXNlIDB4ZWU6CisJCSAg ICBjYXNlIDB4Zjk6CisJCSAgICBjYXNlIDB4ZmI6CisJCSAgICAgIGlmIChp Mzg2X3JlY29yZF9mbG9hdHMgKGdkYmFyY2gsICZpciwKKwkJCQkJICAgICAg STM4Nl9TQVZFX0ZQVV9SRUdTKSkKKwkJCXJldHVybiAtMTsKKwkJICAgICAg YnJlYWs7CisJCSAgICBjYXNlIDB4ZmQ6CisJCSAgICAgIGlmIChpMzg2X3Jl Y29yZF9mbG9hdHMgKGdkYmFyY2gsICZpciwKKwkJCQkJICAgICAgSTM4N19T VDBfUkVHTlVNICh0ZGVwKSkpCisJCQlyZXR1cm4gLTE7CisJCSAgICAgIGlm IChpMzg2X3JlY29yZF9mbG9hdHMgKGdkYmFyY2gsICZpciwKKwkJCQkJICAg ICAgSTM4N19TVDBfUkVHTlVNICh0ZGVwKSArIDEpKQorCQkJcmV0dXJuIC0x OworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJfQorICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHhkYToKKyAgICAgICAgICAg ICAgaWYgKDB4ZTkgPT0gaXIubW9kcm0pCisgICAgICAgICAgICAgICAgewor CQkgIGlmIChpMzg2X3JlY29yZF9mbG9hdHMgKGdkYmFyY2gsICZpciwgSTM4 Nl9TQVZFX0ZQVV9SRUdTKSkKKwkJICAgIHJldHVybiAtMTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKCgweDBjID09IGly Lm1vZHJtID4+IDQpIHx8ICgweDBkID09IGlyLm1vZHJtID4+IDQpKQorICAg ICAgICAgICAgICAgIHsKKwkJICBpZiAoaTM4Nl9yZWNvcmRfZmxvYXRzIChn ZGJhcmNoLCAmaXIsCisJCQkJCSAgSTM4N19TVDBfUkVHTlVNICh0ZGVwKSkp CisJCSAgICByZXR1cm4gLTE7CisJCSAgaWYgKCgoaXIubW9kcm0gJiAweDBm KSA+IDApICYmICgoaXIubW9kcm0gJiAweDBmKSA8PSA3KSkKKwkJICAgIHsK KwkJICAgICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2RiYXJjaCwgJmly LAorCQkJCQkgICAgICBJMzg3X1NUMF9SRUdOVU0gKHRkZXApICsKKwkJCQkJ ICAgICAgKGlyLm1vZHJtICYgMHgwZikpKQorCQkJcmV0dXJuIC0xOworCQkg ICAgfQorCQkgIGVsc2UgaWYgKChpci5tb2RybSAmIDB4MGYpIC0gMHgwOCkK KwkJICAgIHsKKwkJICAgICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2Ri YXJjaCwgJmlyLAorCQkJCQkgICAgICBJMzg3X1NUMF9SRUdOVU0gKHRkZXAp ICsKKwkJCQkJICAgICAgKChpci5tb2RybSAmIDB4MGYpIC0gMHgwOCkpKQor CQkJcmV0dXJuIC0xOworCQkgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4ZGI6Cisg ICAgICAgICAgICAgIGlmICgweGUzID09IGlyLm1vZHJtKQorICAgICAgICAg ICAgICAgIHsKKwkJICBpZiAoaTM4Nl9yZWNvcmRfZmxvYXRzIChnZGJhcmNo LCAmaXIsIEkzODZfU0FWRV9GUFVfRU5WKSkKKwkJICAgIHJldHVybiAtMTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKCgw eDBjID09IGlyLm1vZHJtID4+IDQpIHx8ICgweDBkID09IGlyLm1vZHJtID4+ IDQpKQorICAgICAgICAgICAgICAgIHsKKwkJICBpZiAoaTM4Nl9yZWNvcmRf ZmxvYXRzIChnZGJhcmNoLCAmaXIsCisJCQkJCSAgSTM4N19TVDBfUkVHTlVN ICh0ZGVwKSkpCisJCSAgICByZXR1cm4gLTE7CisJCSAgaWYgKCgoaXIubW9k cm0gJiAweDBmKSA+IDApICYmICgoaXIubW9kcm0gJiAweDBmKSA8PSA3KSkK KwkJICAgIHsKKwkJICAgICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2Ri YXJjaCwgJmlyLAorCQkJCQkgICAgICBJMzg3X1NUMF9SRUdOVU0gKHRkZXAp ICsKKwkJCQkJICAgICAgKGlyLm1vZHJtICYgMHgwZikpKQorCQkJcmV0dXJu IC0xOworCQkgICAgfQorCQkgIGVsc2UgaWYgKChpci5tb2RybSAmIDB4MGYp IC0gMHgwOCkKKwkJICAgIHsKKwkJICAgICAgaWYgKGkzODZfcmVjb3JkX2Zs b2F0cyAoZ2RiYXJjaCwgJmlyLAorCQkJCQkgICAgICBJMzg3X1NUMF9SRUdO VU0gKHRkZXApICsKKwkJCQkJICAgICAgKChpci5tb2RybSAmIDB4MGYpIC0g MHgwOCkpKQorCQkJcmV0dXJuIC0xOworCQkgICAgfQorICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl IDB4ZGM6CisgICAgICAgICAgICAgIGlmICgoMHgwYyA9PSBpci5tb2RybSA+ PiA0KQorCQkgIHx8ICgweDBkID09IGlyLm1vZHJtID4+IDQpCisJCSAgfHwg KDB4MGYgPT0gaXIubW9kcm0gPj4gNCkpCisgICAgICAgICAgICAgICAgewor CQkgIGlmICgoaXIubW9kcm0gJiAweDBmKSA8PSA3KQorCQkgICAgeworCQkg ICAgICBpZiAoaTM4Nl9yZWNvcmRfZmxvYXRzIChnZGJhcmNoLCAmaXIsCisJ CQkJCSAgICAgIEkzODdfU1QwX1JFR05VTSAodGRlcCkgKworCQkJCQkgICAg ICAoaXIubW9kcm0gJiAweDBmKSkpCisJCQlyZXR1cm4gLTE7CisJCSAgICB9 CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAoaTM4Nl9yZWNvcmRf ZmxvYXRzIChnZGJhcmNoLCAmaXIsCisJCQkJCSAgICAgIEkzODdfU1QwX1JF R05VTSAodGRlcCkgKworCQkJCQkgICAgICAoKGlyLm1vZHJtICYgMHgwZikg LSAweDA4KSkpCisJCQlyZXR1cm4gLTE7CisJCSAgICB9CisgICAgICAgICAg ICAgICAgfQorCSAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweGRk OgorICAgICAgICAgICAgICBpZiAoMHgwYyA9PSBpci5tb2RybSA+PiA0KQor ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChpMzg2 X3JlY29yZF9mbG9hdHMgKGdkYmFyY2gsICZpciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkzODdfRlRBR19SRUdOVU0g KHRkZXApKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoKDB4MGQg PT0gaXIubW9kcm0gPj4gNCkgfHwgKDB4MGUgPT0gaXIubW9kcm0gPj4gNCkp CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKChp ci5tb2RybSAmIDB4MGYpIDw9IDcpCisgICAgICAgICAgICAgICAgICAgIHsK KwkJICAgICAgaWYgKGkzODZfcmVjb3JkX2Zsb2F0cyAoZ2RiYXJjaCwgJmly LAorCQkJCQkgICAgICBJMzg3X1NUMF9SRUdOVU0gKHRkZXApICsKKwkJCQkJ ICAgICAgKGlyLm1vZHJtICYgMHgwZikpKQorCQkJcmV0dXJuIC0xOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAoaTM4Nl9yZWNvcmRfZmxvYXRzIChnZGJhcmNoLCAmaXIsCisJCQkJCSAg ICAgIEkzODZfU0FWRV9GUFVfUkVHUykpCisgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgY2FzZSAweGRlOgorICAgICAgICAgICAgICBpZiAoKDB4MGMgPT0gaXIu bW9kcm0gPj4gNCkKKwkJICB8fCAoMHgwZSA9PSBpci5tb2RybSA+PiA0KQor CQkgIHx8ICgweDBmID09IGlyLm1vZHJtID4+IDQpCisJCSAgfHwgKDB4ZDkg PT0gaXIubW9kcm0pKQorICAgICAgICAgICAgICAgIHsKKwkJICBpZiAoaTM4 Nl9yZWNvcmRfZmxvYXRzIChnZGJhcmNoLCAmaXIsIEkzODZfU0FWRV9GUFVf UkVHUykpCisJCSAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHhkZjoK KyAgICAgICAgICAgICAgaWYgKDB4ZTAgPT0gaXIubW9kcm0pCisgICAgICAg ICAgICAgICAgeworCQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KGlyLnJlZ2NhY2hlLCBJMzg2X0VBWF9SRUdOVU0pKQorCQkgICAgcmV0dXJu IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBp ZiAoKDB4MGYgPT0gaXIubW9kcm0gPj4gNCkgfHwgKDB4MGUgPT0gaXIubW9k cm0gPj4gNCkpCisgICAgICAgICAgICAgICAgeworCQkgIGlmIChpMzg2X3Jl Y29yZF9mbG9hdHMgKGdkYmFyY2gsICZpciwgSTM4Nl9TQVZFX0ZQVV9SRUdT KSkKKwkJICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIGJyZWFrOworCSAgICB9CisJfQogICAgICAgYnJlYWs7Ci0K ICAgICAgIC8qIHN0cmluZyBvcHMgKi8KICAgICAgIC8qIG1vdnNTICovCiAg ICAgY2FzZSAweGE0OgpAQCAtNDgzNSwxMiArNTE3OCwxOCBAQCByZXN3aXRj aDoKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBmd2FpdCAqLwotICAgICAg LyogWFhYICovCiAgICAgY2FzZSAweDliOgotICAgICAgcHJpbnRmX3VuZmls dGVyZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGRvZXNuJ3Qgc3VwcG9ydCBpbnN0 cnVjdGlvbiAiCi0JCQkgICAiZndhaXQuXG4iKSk7Ci0gICAgICBpci5hZGRy IC09IDE7Ci0gICAgICBnb3RvIG5vX3N1cHBvcnQ7CisgICAgICBpZiAodGFy Z2V0X3JlYWRfbWVtb3J5IChpci5hZGRyLCAmdG1wdTgsIDEpKQorICAgICAg ICB7CisgICAgICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICAgICAgICAg IHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJlY29yZDogZXJyb3Ig cmVhZGluZyBtZW1vcnkgYXQgIgorCQkJCSAiYWRkciAweCVzIGxlbiA9IDEu XG4iKSwKKwkJCSAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgaXIuYWRkcikp OworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgb3Bj b2RlID0gKHVpbnQzMl90KSB0bXB1ODsKKyAgICAgIGlyLmFkZHIrKzsKKyAg ICAgIGdvdG8gcmVzd2l0Y2g7CiAgICAgICBicmVhazsKIAogICAgICAgLyog aW50MyAqLwo= --000325575b2235e9170471753ca7--